快速幂+快速乘

快速幂+快速乘

求 $(a^b)\bmod p$ $1<=a,b,p<=10^9$ 快速幂直接过
当 $1<=a,b,p<=10^{18}$ 快速幂中间一步相乘会爆,用快速乘就行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
using namespace std;
//1<=a,b,p<<10^18
long long calc(long long a,long long b,long long p){
long long ans=0;
while(b){
if( b & 1 ) ans=(ans+a)%p;
a=(a*2)%p;
b>>=1;
}
return ans;
}
int main(){
// freopen("a.txt","r",stdin);
long long a,b,p;
cin>>a>>b>>p;
long long ans=1%p;//p==1 ans=0 特殊情况
while(b){
if( b&1 ) ans=calc(ans,a,p);
a=calc(a,a,p);
b>>=1;
}
cout<<ans;
return 0;
}

快速幂+快速乘
https://blog.989883.xyz/2019/04/13/csdn/快速幂+快速乘/
作者
emerald
发布于
2019年4月13日
许可协议