Skip to content

Commit c2b8df9

Browse files
authored
Update index.html
1 parent 3cd5550 commit c2b8df9

1 file changed

Lines changed: 122 additions & 40 deletions

File tree

‎index.html‎

Lines changed: 122 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,14 @@ <h2>Editor</h2>
3333
<button id="run-btn" onclick="runCode()">▶ RUN</button>
3434
</div>
3535
<textarea id="code" spellcheck="false">
36-
primes = primes(200000);
36+
const maxn = 200000;
37+
primes = primes(maxn);
3738
plot(count(primes));
3839
plot(x => ceil(x / ln(x)));
3940
plot(x => ceil(x / ln(x) + x / pow(ln(x), 2)));
4041
plot(x => floor(li(x)));
4142
plot(x => Math.ceil(x / (ln(x) - 1)));
42-
maybeprimes = maybePrimes(200000, []);
43+
maybeprimes = maybePrimes(maxn);
4344
plot(count(maybeprimes));
4445

4546
//plot(x => cgamma(complex(0, x)).y);
@@ -127,42 +128,35 @@ <h2>Editor</h2>
127128
const relumin = (x) => x >= 0 ? undefined : x;
128129
const relumax = (x) => x <= 0 ? undefined : x;
129130
function gcd(a, b) {
130-
while (b) {
131-
[a, b] = [b, a % b];
132-
}
133-
return a;
134-
}
135-
function primes(n) {
136-
const seq = [];
137-
for (let i = 2; i <= n; i++) {
138-
let isPrime = true;
139-
for (let j = 2; j * j <= i; j++) {
140-
if (i % j === 0) { isPrime = false; break; }
141-
}
142-
if (isPrime) { seq.push(i); }
131+
a = a < 0 ? -a : a;
132+
b = b < 0 ? -b : b;
133+
while (b !== 0) {
134+
const t = a % b;
135+
a = b;
136+
b = t;
143137
}
144-
return seq;
138+
return a;
145139
}
146140

147141
function factorial(n) {
148-
if (n <= 0) return [];
149-
const seq = [1];
150-
for (let i = 2; i <= n; i++) {
151-
seq.push(seq[seq.length - 1] * i);
152-
}
153-
return seq;
142+
if (n <= 0) return [];
143+
const seq = [1];
144+
for (let i = 2; i <= n; i++) {
145+
seq.push(seq[seq.length - 1] * i);
146+
}
147+
return seq;
154148
}
155149

156150
function isprime(x) {
157-
if (x < 2) { return false; }
158-
if (x <= 3) { return true; }
159-
if (x % 2 === 0 || x % 3 === 0) { return false; }
160-
for (let i = 5; i * i <= x; i += 6) {
161-
if (x % i === 0 || x % (i + 2) === 0) {
162-
return false;
163-
}
151+
if (x < 2) { return false; }
152+
if (x <= 3) { return true; }
153+
if (x % 2 === 0 || x % 3 === 0) { return false; }
154+
for (let i = 5; i * i <= x; i += 6) {
155+
if (x % i === 0 || x % (i + 2) === 0) {
156+
return false;
164157
}
165-
return true;
158+
}
159+
return true;
166160
}
167161

168162
// According to this logic, almost all functions can be turned into prime versions. like fib-prime or mersenne-prime with add condition
@@ -395,36 +389,124 @@ <h2>Editor</h2>
395389
return num;
396390
}
397391

398-
const SEED = Math.random();
399-
function rand(n) {
400-
let x = (n * 374761393 + SEED * 668265263) >>> 0;
392+
function modPow(base, exp, mod) {
393+
let result = 1;
394+
base %= mod;
395+
while (exp > 0) {
396+
if (exp & 1) {
397+
result = (result * base) % mod;
398+
}
399+
base = (base * base) % mod;
400+
exp >>= 1;
401+
}
402+
return result;
403+
}
404+
405+
function isMillerPrime(n, primes= [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]) {
406+
if (n < 2) return false;
407+
for (const p of primes) {
408+
if (n % p === 0) {
409+
return n === p;
410+
}
411+
}
412+
let d = n - 1;
413+
let s = 0;
414+
while ((d & 1) === 0) {
415+
d /= 2;
416+
s++;
417+
}
418+
const witnesses = [2, 325, 9375, 28178, 450775, 9780504, 1795265022];
419+
for (let a of witnesses) {
420+
a %= n;
421+
if (a === 0) continue;
422+
let x = modPow(a, d, n);
423+
if (x === 1 || x === n - 1) {
424+
continue;
425+
}
426+
let composite = true;
427+
for (let r = 1; r < s; r++) {
428+
x = (x * x) % n;
429+
if (x === n - 1) {
430+
composite = false;
431+
break;
432+
}
433+
}
434+
if (composite) {
435+
return false;
436+
}
437+
}
438+
return true;
439+
}
440+
441+
function rand(n, seed) {
442+
let x = (n * 374761393 + seed * 668265263) >>> 0;
401443
x = ((x ^ (x >>> 13)) * 1274126177) >>> 0;
402444
x = (x ^ (x >>> 16)) >>> 0;
403445
return x / 4294967296;
404446
}
405447

406-
function isMaybePrime(n, primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41]) {
448+
function isMaybePrime(n, primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41], seed = 18) {
407449
const num = Math.ceil(Math.abs(n));
408450
if (num <= 1) return false;
409451
if (primes.includes(num)) return true;
410452
for (const prime of primes) {
411453
if (num % prime === 0) return false;
412454
}
413-
let W = 1;
455+
let w = 1;
414456
for (const prime of primes) {
415-
W *= (1 - 1 / prime);
457+
w *= (1 - 1 / prime);
458+
}
459+
return rand(n, seed) < 1 / (Math.log(num) * w);
460+
}
461+
462+
function maybePrimes(n, primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41], seed = 18) {
463+
let arr = [];
464+
for (let i = 0; i < n; i++) {
465+
if (isMaybePrime(i, primes, seed)) {
466+
arr.push(i);
467+
}
416468
}
417-
return rand(n) < 1 / Math.log(num) / W;
469+
/*let upperBound = [];
470+
let lowerBound= [];
471+
for (let x = 2; x <= arr.length; x++) {
472+
upperBound.push(Math.ceil(x * (Math.log(x) + Math.log(Math.log(x)) - 0.8)));
473+
lowerBound.push(Math.ceil(x * (Math.log(x) + Math.log(Math.log(x)) - 1.0)));
474+
}*/
475+
return arr;
418476
}
419477

420-
function maybePrimes(n, primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41]){
478+
function millerPrimes(n, primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41]) {
421479
let arr = [];
422-
for (let i = 0; i < n; i++) {
423-
if (isMaybePrime(i, primes)) { arr.push(i) }
480+
for (let i = 0; i < n; i++) {
481+
if (isMillerPrime(i, primes)) {
482+
arr.push(i);
483+
}
424484
}
425485
return arr;
426486
}
427487

488+
function seqPrimes(n, primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41]) {
489+
let arr = [];
490+
for (let i = 0; i < n; i++) {
491+
if (isprime(i)) {
492+
arr.push(i);
493+
}
494+
}
495+
return arr;
496+
}
497+
498+
function primes(n) {
499+
const seq = [];
500+
for (let i = 2; i <= n; i++) {
501+
let isPrime = true;
502+
for (let j = 2; j * j <= i; j++) {
503+
if (i % j === 0) { isPrime = false; break; }
504+
}
505+
if (isPrime) { seq.push(i); }
506+
}
507+
return seq;
508+
}
509+
428510
function count(arr) {
429511
if (!arr.length) return [];
430512
const max = arr.reduce((m, x) => (x > m ? x : m), -Infinity);

0 commit comments

Comments
 (0)