1. 快速幂是啥
顾名思义,就是快速算出多少的多少次幂(多少的多少次方)。
2. 思路
我们很容易就能求出以下。
a^b=(a*a)^(b/2)
这是b能除得尽的情况。那除不尽呢?
a^b=(a*a)^[(b-1)/2]*a
不停地进行这样的操作直到b=0,无论b有多大都能省去许多时间复杂度。
3. 代码
#include<bits/stdc++.h>
using namespace std;
long long a,b;
long long fastpower(long long a,long long b){
long long mod=1000000000000000000,c=1;
while(b>0){
if(b%2==1){
b--;
c=c*a%mod;
}
b/=2;
a=a*a%mod;
}
return c%mod;
}//由于结果可能会很大保留后18位。
int main(){
cin>>a>>b;
cout<<fastpower(a,b);
}
这里用了取模(取余)运算。
(a+b)%P=(a%p+b%p)%p
(a*b)%P=(a%p*b%p)%p
(a-b)%P=(a%p-b%p)%p
最后,作者我祝大家新年快乐!作者我想要一个点赞,不过分吧。