export function mod_exp(a, b, n) { let res = 1n; while (b > 0n) { if (b % 2n === 1n) { res = (res * a) % n; } b >>= 1n; a = (a * a) % n; } return res; } export function mod_inv(a, n) { let t = 0n; let new_t = 1n; let r = n; let new_r = a; while (new_r !== 0n) { let quotient = r / new_r; t = new_t; new_t = t - quotient * new_t; r = new_r; new_r = r - quotient * new_r; } if (t < 0) { t = t + n; } return t; }