40 lines
929 B
Java
40 lines
929 B
Java
import java.util.BitSet;
|
|
|
|
public final class TwinPrimes {
|
|
|
|
public static void main(String[] args) {
|
|
final int limit = 1_000_000_000;
|
|
sievePrimes(limit);
|
|
|
|
int target = 10;
|
|
int count = 0;
|
|
boolean last = false;
|
|
boolean first = true;
|
|
|
|
for ( int index = 5; index <= limit; index += 2 ) {
|
|
last = first;
|
|
first = primes.get(index);
|
|
if ( last && first ) {
|
|
count += 1;
|
|
}
|
|
if ( index + 1 == target ) {
|
|
System.out.println(String.format("%8d%s%d", count, " twin primes below ", index + 1));
|
|
target *= 10;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void sievePrimes(int aLimit) {
|
|
primes = new BitSet(aLimit + 1);
|
|
primes.set(2, aLimit + 1);
|
|
for ( int i = 2; i <= Math.sqrt(aLimit); i = primes.nextSetBit(i + 1) ) {
|
|
for ( int j = i * i; j <= aLimit; j += i ) {
|
|
primes.clear(j);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static BitSet primes;
|
|
|
|
}
|