43 lines
944 B
JavaScript
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();
|