RosettaCodeData/Task/Carmichael-3-strong-pseudoprimes/JavaScript/carmichael-3-strong-pseudoprimes.js
2026-04-30 12:34:36 -04:00

43 lines
944 B
JavaScript

"use strict";
function mod(n, m) {
return ((n % m) + m) % m;
}
function isPrime(n) {
if (n === 2 || n === 3) return true;
if (n < 2 || n % 2 === 0 || n % 3 === 0) return false;
for (let div = 5, inc = 2; div * div <= n; div += inc, inc = 6 - inc) {
if (n % div === 0) return false;
}
return true;
}
// emulate Java's integer division (truncation toward zero)
function idiv(a, b) {
return Math.trunc(a / b);
}
function main() {
for (let p = 2; p < 62; p++) {
if (!isPrime(p)) continue;
for (let h3 = 2; h3 < p; h3++) {
const g = h3 + p;
for (let d = 1; d < g; d++) {
if ((g * (p - 1)) % d !== 0 || mod(-p * p, h3) !== d % h3) continue;
const q = 1 + idiv((p - 1) * g, d);
if (!isPrime(q)) continue;
const r = 1 + idiv(p * q, h3);
if (!isPrime(r) || (q * r) % (p - 1) !== 1) continue;
console.log(`${p} x ${q} x ${r}`);
}
}
}
}
main();