题目大意
读入三个整数 $a$ , $b$ , $p$ ,求 $a^b$ % $p$。
数据范围
$0≤a,b≤10^9$
$1≤p≤10^9$
思路
快速幂。
这里使用迭代和递归两种方式进行实现。
代码1
#include<bits/stdc++.h>
using namespace std;
long long a,b,p,ans=1;
int main()
{
cin>>a>>b>>p;
while(b)
{
if(b&1)ans=ans*a%p;
b>>=1;
a=a*a%p;
}
ans%=p;
cout<<ans<<endl;
}
代码2
#include<bits/stdc++.h>
using namespace std;
long long a,b,p;
long long qpow(long long a,long long b)
{
if(!b)return 1%p;
a%=p;
long long ans=qpow(a,b>>1);
ans=ans*ans%p;
if(b&1)ans=ans*a%p;
return ans;
}
int main()
{
cin>>a>>b>>p;
cout<<qpow(a,b)<<endl;
}
总结
简单的快速幂,提供的两种方法都能够 $Accept$ 。
题目可能还有其他方法,有兴趣的读者可以自己探索。
如果有什么问题,欢迎在评论区中指出。