Project Euler 35
using System; using System.Collections.Generic; using System.Linq; class PE035 { static HashSet<int> Sieve(int n) { var xs = new bool[n+1]; // 全ては合成数ではないとする for (int i = 3; i <= n; i++) { if (!xs[i]) { // for (int j = i*2; j <= n; j += i) { xs[j] = true; // 合成数である } } } var primeSet = new HashSet<int>(); primeSet.Add(2); for (int i = 3; i <= n; i += 2) { if (!xs[i]) primeSet.Add(i); } return primeSet; } static List<int> Rotations(int n) { var digits = n.ToString().Select(e => e - '0').ToArray(); var xs = new List<int>(); for (int i = 0; i < digits.Length; i++) { int x = 0; int p = i; for (int j = 0; j < digits.Length; j++) { x = 10*x + digits[p]; if (++p == digits.Length) p = 0; } xs.Add(x); } return xs; } static void Main() { const int N = 1000000; var primes = Sieve(N); var circularPrimeSet = new HashSet<int>(); foreach (int prime in primes) { if (circularPrimeSet.Contains(prime)) continue; var xs = Rotations(prime); bool isCircularPrime = true; foreach (int x in xs) { if (!primes.Contains(x)) { isCircularPrime = false; break; } } if (isCircularPrime) { foreach (int x in xs) circularPrimeSet.Add(x); } } Console.WriteLine(circularPrimeSet.Count); } }
プログラムを書き終わってから、Project Euler 35(1) - 桃の天然水 を見ました。