我们知道:
(A*B) % MOD = ((A % MOD) * (B % MOD)) % MOD
Run Code Online (Sandbox Code Playgroud)
所以
(A^n) % MOD = (((A ^ (n/2)) % MOD) * ((A ^ (n/2)) % MOD)) % MOD;
Run Code Online (Sandbox Code Playgroud)
我们可以递归地做到这一点。
所以,这是我们的功能:
int cal(int pow, int val, int MOD){
if(pow == 0)
return 1;
int v = cal(pow/2, val, MOD);
if(pow % 2 == 0)
return (v*v) % MOD;
else
return (((v*val) % MOD) * v) % MOD;
}
Run Code Online (Sandbox Code Playgroud)