一 题目
二 示例及提示
三 题解
快速幂算法的核心思想就是每一步都把指数分成两半,而相应的底数做平方运算。这样不仅能把非常大的指数给不断变小,所需要执行的循环次数也变小,而最后表示的结果却一直不会变。
例如:
此外, 关于取余运算的性质有:
(A + B) mod b=(A mod b + B mod b) mod b
(A × B) mod b=((A mod b)×(B mod b)) mod b
代码:
#include <iostream>
using namespace std;
long long quickPower(long long a,long long b,long long p)
{
long long base = a,ans = 1;//base是a^(2^n) ans是答案
while(b>0){
if(b&1){
ans*=base;
ans%=p;
}
base*=base;
base%=p;
b>>=1;
}
return ans;
}
int main()
{
long long a,b,p;
cin >> a >> b >> p;
quickPower(a,b,p);
cout<<a<<"^"<<b<<" mod "<<p<<"="<<quickPower(a,b,p);
return 0;
}
最最最详细的题解可以看大佬的这篇文章:快速幂和取余运算 - 学委 的博客 - 洛谷博客
以及,请注意题目的数据范围啊啊啊啊!不要再明明是longlong还写int了!!