Twin primes: Difference between revisions
Content added Content deleted
imported>Maxima enthusiast No edit summary |
m (New post which completes the extended task, in addition to an existing post which completes only the standard task.) |
||
Line 928: | Line 928: | ||
> 1000 |
> 1000 |
||
> 35 twin prime pairs. |
> 35 twin prime pairs. |
||
</pre> |
|||
===Extended Task=== |
|||
<syntaxhighlight lang="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; |
|||
} |
|||
</syntaxhighlight> |
|||
{{ out }} |
|||
<pre> |
|||
2 twin primes below 10 |
|||
8 twin primes below 100 |
|||
35 twin primes below 1000 |
|||
205 twin primes below 10000 |
|||
1224 twin primes below 100000 |
|||
8169 twin primes below 1000000 |
|||
58980 twin primes below 10000000 |
|||
440312 twin primes below 100000000 |
|||
3424506 twin primes below 1000000000 |
|||
</pre> |
</pre> |
||