快速幂
快速幂
先放题目
求 a 的 b 次方对 p 取模的值。
输入格式
三个整数 a,b,p,在同一行用空格隔开。
输出格式
输出一个整数,表示a^b mod p的值。
数据范围
0≤a,b≤\(1e9\)
1≤p≤\(1e9\)
输入样例:
3 2 7
输出样例:
2
这个数据一看就知道直接求幂,肯定当场就无了。
众所周知,一个十进制数可以由二进制数 \(2^0 , 2^1\)……等表示出来,所以我们求\(a^b\),可以把b化为二进制.
现在我们对b从最低位开始看,如果不为0,就让结果乘以当前的b位数对应的幂。
#include <iostream>
using namespace std;
typedef long long LL;
int qmi(int a,int b,int p){
int res=1%p;
while(b){
if(b&1) res=(LL)res*a%p;//为了防止res*a超出int 先转为long long
a=(LL)a*a%p;
b=b>>1;
}
return res;
}
int main(){
int a,b,p;
cin>>a>>b>>p;
cout<<qmi(a,b,p)<<endl;
return 0;
}
为了防止res*a超出int 先转为long long

浙公网安备 33010602011771号