Сообщение от Malleys
|
Alexandroppolus, проверьте свой алгоритм, powToMod(366142356n, 1447804911n, 219020071n) должно выдавать 38504623
|
тот же вариант для БигИнта, работает правильно
function powModBig(n, p, m) {
if (n < 1n) { return 0n; }
if (m < 0n) { m = 0n; }
n = n % m;
var r = 1n;
while (p >= 1n) {
if (p % 2n) {
r = (r * n) % m;
}
n = (n * n) % m;
p = p / 2n;
}
return r;
}
alert(powModBig(366142356n, 1447804911n, 219020071n))
а по сути здесь абсолютно тот же алгоритм, как у тебя, только без рекурсии.
----
вариант для обычных чисел не может с такими параметрами, потому что 366142356 % 219020071 дает большое число, которое при возведении в квадрат вылезает за пределы нумбера.