Реализации алгоритмов/Быстрое возведение в степень: различия между версиями

<source lang=javascript>
function faststep (val, step, mod) {
mod = parseInt(mod);
#возведение числа val в степень step по step по модулю mod.
#if результат не требуется приводить по модулю then подать на вход mod=0.
s = 1; v = step; c = val;
while (v != 0) {
flag = 0;
if (v%2 == 1) {
if (!mod !=0) s = (s*c) % mod;
else s = s*c;
else
s = (s*c) % mod;
v = (v-1)/2;
if (!mod !=0) c = (c*c) % mod;
else c = c*c;
else
c = (c*c) % mod;
flag = 1;
}
else {
v = v/2;
}
if (!flag)
if (!mod)
c = c*c;
else
c = (c*c) % mod;
}
return s;
Анонимный участник