51nod 1046 A^B Mod C
#include<iostream>
using namespace std;
int main()
{long long a,b,c,sum= 1;
cin>>a>>b>>c;
a=a%c;
while(b)
{ if(b%2==1)
sum=(sum*a)%c;
b/=2;
a=(a*a)%c;
}
cout<<sum;
简单的算法是将sum初始化为1,然后重复将sum乘以X,每次乘法之后应用%运算符(这样使得sum的值变小,以免溢出),执行N次相乘后,sum就是我们要找的答案。
这样对于较小的N值来说,实现是合理的,但是当N的值很大时,需要计算很长时间,是不切实际的。下面的结论可以得到一种更好的算法。
如果N是偶数,那么X^N =(X*X)^[N/2];
如果N是奇数,那么X^N = X*X^(N-1) = X *(X*X)^[N/2];
其中[N]是指小于或等于N的最大整数。

浙公网安备 33010602011771号