La exponenciación modular falla para mod grande en C ++
Este es el código que estoy usando para calcular(n^p)%mod
. Desafortunadamente, falla para grandes valores demod
(en mi casomod = 10000000000ULL
) cuando lo llamo desdemain()
método. Alguna idea; ¿por qué?
ull powMod(ull n, ull p, ull mod) {
ull ans = 1;
n = n%mod;
while(p) {
if(p%2 == 1) {
ans = (ans*n)%mod;
}
n = (n*n)%mod;
p /= 2;
}
return ans;
}
Aquí,ull
es un typedef paraunsigned long long
.