ProgramAlgTrain/20240919/CSP常考算法模板/快速幂.cpp

27 lines
489 B
C++
Raw Permalink Normal View History

2024-09-19 02:22:41 +00:00
#include <bits/stdc++.h>
using namespace std;
int b, p, k;
/*
2024-09-19 03:11:59 +00:00
a*b%k=(a%k)*(b%k)%k
p=2*(p/2)+p%2
2024-09-19 02:22:41 +00:00
*/
int f(int p) {
if(p==0) // b^0%k
return 1%k;
int t=f(p/2)%k;
t=(t*t)%k; // b^p%k=(b^(p/2))^2%k
if(p%2==1)
2024-09-19 03:11:59 +00:00
t=(t*b)%k; // 如果p为奇数则b^p%k=((b^(p/2))^2)*b%k
2024-09-19 02:22:41 +00:00
return t;
}
int main(){
cin>>b>>p>>k;
int tmpb=b;
b%=k;
printf("%d^%d mod %d=%d", tmpb, p, k, f(p));
return 0;
}