快速幂笔记
问题
给你三个整数 \(a\) , \(b\) , \(p\) ,求 \(a^b \bmod p\)。
思路
如果直接算复杂度太高了,我们考虑优化。
我们知道 \(a^b\) 有两种情况,一种是 \(n\) 为偶数,一种是 \(n\) 为奇数。
因为 \(a^{m+n}=a^m+a^n\) ,所以当 \(n\) 为偶数时 \(a^n=a^{n/2}*a^{n/2}\) ,而当 \(n\) 为奇数时,则在此基础上再多乘上一个 \(a\) 就可以了。
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a,b,p;
int qmi(int a,int b,int p){
int x=1;
while(b){
if(b&1) x=x*a%p;
a=a*a%p;
b/=2;
}
return x;
}
signed main(){
cin>>a>>b>>p;
printf("%lld^%lld mod %lld=%lld\n",a,b,p,qmi(a,b,p));
return 0;
}
水完了。
yingxilin
JX の joker
2024-12-22