快速幂取模算法
1,给出定理
(a*b)%c = (a%c)*(b%c)%c

2,分解b
将b分解为2进制数,例如2753 = 101011000001 = 2^0 +2^6+2^7 + 2^9 +2^11

3,运用公式计算
15=1111=2^3+2^2+2^1+2^0=b3+b2+b1+b0
a^15%p=((((a^b3%p)(a^b2%p))%p(a^b1%p))%p(a^b0%p))%p
4.算法
可以看出来,即为2790的2的n次方幂 %c 一直乘的结果。
代码实现:
#include<iostream>
using namespace std;
typedef long long LL;
int main(){
LL a,b,p,m;
cin>>a>>b>>p;
m=1%p;
while(b){
if(b&1) m=(m</iostream>
a)%p; //判断最后一位是否为零
a=a*a%p;
b=b/2;
}
cout<<m;
return 0;
}