Skip to content

Instantly share code, notes, and snippets.

@krupenik
Created November 10, 2014 23:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save krupenik/0b79ac4281f14c04ec79 to your computer and use it in GitHub Desktop.
Save krupenik/0b79ac4281f14c04ec79 to your computer and use it in GitHub Desktop.
require "set"
def eratosthenes n
nums = [nil, nil, *2..n]
(2..Math.sqrt(n)).each do |i|
(i**2..n).step(i) { |m| nums[m] = nil } if nums[i]
end
nums.compact
end
def rotations number
rotations = [number]
digits = digits(number)
(digits.size - 1).times do
rotations << from_digits(digits.push(digits.shift))
end
rotations.uniq
end
def from_digits digits
number = 0
digits.reverse.each_with_index do |digit, power|
number += digit * 10**power
end
number
end
def digits number
digits = []
while number > 0
digits << number % 10
number /= 10
end
digits.reverse
end
def solve n
primes = eratosthenes(n).to_set
primes.reject! { |prime| !rotations(prime).all? { |rotation| primes.include?(rotation) } }
primes
end
puts solve(ARGV[0].to_i).size
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment