September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
|
|
@ -0,0 +1,30 @@
|
|||
// http://stackoverflow.com/revisions/10733621/4
|
||||
|
||||
fcn postponed_sieve(){ # postponed sieve, by Will Ness
|
||||
vm.yield(2); vm.yield(3); # original code David Eppstein,
|
||||
vm.yield(5); vm.yield(7); # ActiveState Recipe 2002
|
||||
D:=Dictionary();
|
||||
ps:=Utils.Generator(postponed_sieve); # a separate Primes Supply:
|
||||
p:=ps.pump(2,Void); # (3) a Prime to add to dict
|
||||
q:=p*p; # (9) when its sQuare is
|
||||
c:=9; # the next Candidate
|
||||
while(1){
|
||||
if (not D.holds(c)){ # not a multiple of any prime seen so far:
|
||||
if (c < q) vm.yield(c); # a prime, or
|
||||
else{ # (c==q): # the next prime's square:
|
||||
add(D,c + 2*p,2*p); # (9+6,6 : 15,21,27,33,...)
|
||||
p=ps.next(); # (5)
|
||||
q=p*p; # (25)
|
||||
}
|
||||
}else{ # 'c' is a composite:
|
||||
s := D.pop(c); # step of increment
|
||||
add(D,c + s,s); # next multiple, same step
|
||||
}
|
||||
c += 2; # next odd candidate
|
||||
}
|
||||
}
|
||||
|
||||
fcn add(D,x,s){ # make no multiple keys in Dict
|
||||
while(D.holds(x)){ x += s } # increment by the given step
|
||||
D[x] = s;
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
primes:=Utils.Generator(postponed_sieve);
|
||||
primes.walk(20).println(); // first 20 primes
|
||||
|
||||
primes.pump(List,fcn(p){ // the primes between 100 & 150
|
||||
if (p<100) Void.Skip else if(p>150) Void.Stop else p
|
||||
}).println();
|
||||
|
||||
primes.reduce(fcn(n,p){ // count of primes between 7700 & 8000
|
||||
if (p<=7700) n else if(p>8000) Void.Stop else n+1
|
||||
},0).println();
|
||||
|
||||
primes=Utils.Generator(postponed_sieve); // new Generator
|
||||
primes.drop(0d9_999); primes.next().println(); // 10,000th prime
|
||||
|
||||
// or to carry on until the 100,000th:
|
||||
primes.pump(Void,'wrap(p){ primes.n<=0d100_000 and p or Void.Stop }).println();
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
var [const] BN=Import("zklBigNum"); // libGMP
|
||||
bigPrimes:=Walker(fcn(p){ p.nextPrime().copy(); }.fp(BN(1)));
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
bigPrimes.walk(20).println(); // first 20 primes
|
||||
bigPrimes.pump(Void,'wrap(p){ bigPrimes.n<=0d10_000 and p or Void.Stop }).println();
|
||||
Loading…
Add table
Add a link
Reference in a new issue