Successive prime differences: Difference between revisions

m (→‎{{header|Sidef}}: added zkl header)
(→‎{{header|zkl}}: added code)
Line 439:
 
=={{header|zkl}}==
{{libheader|GMP}} GNU Multiple Precision Arithmetic Library
<lang zkl></lang>
Using GMP ( probabilistic primes),
<lang zkl></lang>
because it is easy and fast to generate primes.
 
[[Extensible prime generator#zkl]] could be used instead.
<lang zkl>const PRIME_LIMIT=1_000_000;
var [const] BI=Import("zklBigNum"); // libGMP
var [const] primeBitMap=Data(PRIME_LIMIT).fill(0x30); // one big string
p:= BI(1);
while(p.nextPrime()<=PRIME_LIMIT){ primeBitMap[p]="1" } // bitmap of primes
 
fcn primeWindows(m,deltas){ // eg (6,4,2)
n,r := 0,List();
ds:=deltas.len().pump(List,'wrap(n){ deltas[0,n+1].sum(0) }); // (6,10,12)
sp:=Data(Void,"1" + "0"*deltas.sum(0));
foreach n in (ds){ sp[n]="1" } // "1000001000101"
while(n=primeBitMap.find(sp,n+1)){ r.append(n) } // (31, 61, 271,...)
r.apply('wrap(n){ T(n).extend(ds.apply('+(n))) }) //( (31,37,41,43), (61,67,71,73), (271,277,281,283) ...)
<lang zkl>}</lang>
<lang zkl>foreach w in (T( T(2), T(1), T(2,2), T(2,4), T(4,2), T(6,4,2) )){
r:=primeWindows(PRIME_LIMIT,w);
println("Primes with deltas of %s (%,d groups):".fmt(w.concat(","),r.len()));
println(" First group: %s; Last group: %s\n"
.fmt(r[0].concat(", "),r[-1].concat(", ")));
<lang zkl>}</lang>
{{out}}
<pre>
Primes with deltas of 2 (8,169 groups):
First group: 3, 5; Last group: 999959, 999961
 
Primes with deltas of 1 (1 groups):
First group: 2, 3; Last group: 2, 3
 
Primes with deltas of 2,2 (1 groups):
First group: 3, 5, 7; Last group: 3, 5, 7
 
Primes with deltas of 2,4 (1,393 groups):
First group: 5, 7, 11; Last group: 999431, 999433, 999437
 
Primes with deltas of 4,2 (1,444 groups):
First group: 7, 11, 13; Last group: 997807, 997811, 997813
 
Primes with deltas of 6,4,2 (306 groups):
First group: 31, 37, 41, 43; Last group: 997141, 997147, 997151, 997153
</pre>
Anonymous user