在c++运算时,我们会遇到a的b次方,b的数可能会很大,比如10000000;如果单纯用for循环做,时间复杂度为o(b)绝对会超了,于是我们要用到快速幂。
我们举一个简单的例子,2的8次方。
如果一个一个乘,时间复杂度为8,2*2*2*2*2*2*2*2.。但我们可以运用数学知识,2*2*2*2*2*2*2*2=4*4*4*4=16*16,时间复杂度大大减少,再运用有关%的知识,这样快速幂就完成了。
这也是一个板子。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a,b,p;
cin>>a>>b>>p;
long long ans=1%p;//一定要%p,参考当b=0的特殊情况
for(;b;b>>=1)
{
if(b&1)
ans=ans*a%p;
a=a*a%p;
}
cout<<ans;
return 0;
}
❀完结撒花❀