14 lines
662 B
Text
14 lines
662 B
Text
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) ...)
|
|
}
|