refactor common logic

This commit is contained in:
filifa 2025-12-11 23:49:34 -05:00
parent f8930cfb4f
commit e55b3c89b0
1 changed files with 10 additions and 11 deletions

View File

@ -53,14 +53,19 @@ function modpow(base, exponent, modulus) {
return result; return result;
} }
function witness(a, n) { function factorTwos(n) {
let d = n - 1n;
let s = 0; let s = 0;
while (d % 2n === 0n) { while (n % 2n === 0n) {
d /= 2n; n /= 2n;
s++; s++;
} }
return [n, s];
}
function witness(a, n) {
const [d, s] = factorTwos(n - 1n);
let x = modpow(a, d, n); let x = modpow(a, d, n);
let y = null; let y = null;
for (let i = 0; i < s; i++) { for (let i = 0; i < s; i++) {
@ -106,13 +111,7 @@ function quadraticNonResidue(p) {
} }
function tonelliShanks(n, p) { function tonelliShanks(n, p) {
let q = p - 1n; const [q, s] = factorTwos(p - 1n);
let s = 0;
while (q % 2n === 0n) {
q /= 2n;
s++;
}
const z = quadraticNonResidue(p); const z = quadraticNonResidue(p);
let m = s; let m = s;