快速幂取模
程序员文章站
2022-07-09 10:27:29
...
首先得知道余数有如下性质:
- (a+b)%m == (a%m+b%m)%m
- a*b%c=((a%c)*b)%c
- ab%c=(a%c)*b%c
- a^p=aa…*a=(a%p) *(a%p) * … *(a%p)
代码:
#include<bits/stdc++.h>
using namespace std;
#define LL long long
LL quickMod(LL a, LL p, LL mod) {
p%=mod;
LL base=1;
while(p) {
if(p&1) base=base*a%mod;
a=a*a%mod;
p>>=1;
}
return base;
}
int main(){
int a,p,mod;
scanf("%d%d%d",&a,&p,&mod);
printf("%d\n",quickMod(a,p,mod));
}