快速幂+快速乘

快速幂+快速乘

求 $(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;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!