问题描述:
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?
解决问题:
先记录好哪些是素数,哪些不是!
public class Problem35 { public static final int UP = 1000000; public static boolean[] prime = new boolean[1000000]; public static boolean IsPrime(int number) { boolean result = true; if (number % 2 == 0) { result = false; } else { int middle = (int) Math.sqrt(number); for (int i = 3; i <= middle; i += 2) { if (number % i == 0) { result = false; break; } } } return result; } public static boolean IsNumber(int number) { boolean ok = true; int current = number; if (!prime[number]) { return false; } if(number<10) return true; do { int hight = current / 10; int low = current % 10; current = Integer.parseInt(low + "" +hight ); // System.out.println("Current:"+current); if (!prime[current]) { return false; } } while (current != number); return ok; } public static int sum() { int result = 0; for (int i = 2; i < UP; i++) { } return result; } public static void main(String[] args) { long sum = 1; Arrays.fill(prime, false); for (int i = 3; i < UP; i++) { if(IsPrime(i)) prime[i] = true; } for(int i=2; i<UP; i++){ if(IsNumber(i)){ System.out.println(i); sum++; } } System.out.println("Sum:"+sum); } }