C'est le code que j'utilise pour calculer (n^p)%mod
. Malheureusement, il échoue pour les grandes valeurs de mod
(dans mon cas mod = 10000000000ULL
) lorsque je l'appelle de la méthode main()
. Une idée; Pourquoi?L'exponentiation modulaire échoue pour un grand mod en C++
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;
}
Ici, ull
est un typedef pour unsigned long long
.
Utilisez une bibliothèque multi-précision comme GMP. –