/*例如求D=C^15%N
由于:C*k % n = (C % n)*(k % n) % n
所以令:
C1 = C*C % N =C^2 % N 1 15
C2 = C1*C % N =C^3 % N 3 7
C3 = C2*C2 % N =C^6 % N
C4 = C3*C % N =C^7 % N 7 3
C5 = C4*C4 % N =C^14 % N
C6 = C5*C % N =C^15 % N 15 1
蒙哥马利算法*/
#include <iostream>
using namespace std;
//base 底数,exponential 指数,mod 模
__int64 base,exp,mod; //base^exp % mod
__int64 Montgomery()
{
__int64 res = 1;
while(exp)
{
if ( exp&1 )
res = (res*base) % mod;
exp >>= 1;
base = (base*base) % mod;
}
return res;
}
int main()
{
int T;
cin >> T;
while(T--)
{
cin >> base >> exp >> mod;
cout << Montgomery() << endl;
}
return 0;
}1
快速幂
最新推荐文章于 2023-06-08 11:16:54 发布