// stackoverflow.com/a/69345662/849891 // by stackoverflow.com/users/849891/will-ness function *primesFrom(start) { console.log("Starting...."); if (start <= 2) { yield 2; } if (start <= 3) { yield 3; } if (start <= 5) { yield 5; } if (start <= 7) { yield 7; } const sieve = new Map(); const ps = primesFrom(2); ps.next(); // skip the 2 let p = ps.next().value; // p==3 let psqr = p * p; // 9 let c = psqr; // first candidate, 9 let s = 6; // step let m = 9; // multiple while( psqr < start ) { // must adjust initial state s = 2 * p; m = p + s * Math. ceil( (start-p)/s ); while (sieve.has(m)) m += s; sieve.set(m, s); p = ps.next().value; psqr = p * p; } if ( start > c) { c = start; } if ( c%2 === 0 ) { c += 1; } // main loop for ( ; true ; c += 2 ) { s = sieve.get(c); if (s !== undefined) { sieve.delete(c); } else if (c < psqr) { yield c; continue; } else { // c == psqr s = 2 * p; p = ps.next().value; psqr = p * p; } m = c + s; while (sieve.has(m)) m += s; sieve.set(m, s); } } (function test() { maxItems = 50; from = 500000000; const ps = primesFrom( from ); array = []; for( i = 0; i < maxItems; i=i+1) { p = ps.next().value; // console.log(p); array.push( p-from ); } console.log(array.join(',')); })();
Standard input is empty
Starting.... Starting.... Starting.... Starting.... Starting.... 3,9,41,57,69,71,77,89,93,99,101,117,183,201,227,231,233,261,273,299,317,321,323,353,359,377,387,393,437,443,461,467,483,489,491,507,539,551,587,597,623,659,663,671,681,693,701,723,729,737