[hide]
t0 = Time.now
def is_prime?(n)
sqar = (n ** 0.5).to_i
3.step(sqar, 2) do |i|
return true if i > n
return false if n % i == 0
end
end
def is_circular_prime(n)
result = [n]
n_size = n.to_s.size
if n_size == 1
$num_result << n if is_prime?(n)
return result
else
1.upto(n_size - 1) {result << result.last.divmod(10)[1] * (10 ** (n_size - 1)) + result.last.divmod(10)[0]}
result.uniq!
end
result.each {|r| return result if not is_prime?(r)}
$num_result += result
return result
end
$num_all = $num_type = [1,3,7,9]
$num_result = [2,5]
1.upto(5) {|i|
temp = []
$num_all.each {|x| $num_type.each {|y| temp << x * 10 + y}}
$num_all |= temp
}
until $num_all.size == 0
$num_all -= is_circular_prime($num_all[0])
end
p ($num_result - [1]).size
p Time.now - t0
[/hide]