Project Euler Problem 35
問題
The number, 197, is called a circular prime because all rotations of the digits: 197, 971, and 719, are themselves prime. There are thirteen such primes below 100: 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, and 97. How many circular primes are there below one million?
ソース
max = 1000000 $prime = Array.new(max, 1) $prime[0..1] = [0, 0] i = 2 while i < Math.sqrt(max).to_i + 1 do (i + i).step(max, i){|x| $prime[x] = 0} i += $prime[(i + 1)..max].index(1) + 1 end class Integer def circular_prime? n = self n.to_s.size.times { return false if $prime[n].zero? n = n / 10 + n % 10 * (10 ** (n.to_s.size - 1)) } true end end puts $prime.each_index{|i| $prime[i] = i unless $prime[i].zero? }.select{|x| !x.zero?}.select{|x| x.circular_prime? }.size
解答
55
感想
循環素数かどうかの判定メソッドを作ってしまえば、あとはカウントするのみ!
循環は計算によって実現しています。