方法是剔除所有可以被素数整除的非素数
第一是找出每个素数
第二是找出每个素数的倍数
public class findPrime {
public boolean[] findPrimes( int max ) {
boolean[] flags = new boolean[max + 1];
for (int i = 2; i < max+1; i++) {
flags[i] = true; //initiate all number as true, except 0 and 1
}
int prime = 2;
while ( prime <= max ) {
crossOff(flags, prime); // cross all the primes multiples
prime = getNextPrime(flags, prime);
if (prime >= flags.length) {
break;
}
}
return flags;
}
void crossOff(boolean[] flags, int prime) {
for (int i = prime * 2; i < flags.length; i += prime) {
flags[i] = false;
}
}
int getNextPrime(boolean[] flags, int prime) {
int next = prime + 1;
while (next < flags.length && !flags[next]) {
next++;
}
return next;
}
}