快速幂
前题引入
我们平时用的pow函数速度太慢了怎么办,我就就需要快速幂(意思废话)
题目分析
前题铺垫
你只是需要知道一个非常简单的东西
ab + ac =a(b+c)
思路
既然暴力是O(b)的,那我们是不是可以考虑O(log b)
那我们尝试将b除以2
那么就可以知道ab = ab/2 + a^b/2 ^
但是我们可以想到如果b是个单数怎么办呢,因为c++是默认向下取整的,所以 ab = ab/2 + ab/2 +ab%2
代码(模板)
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b,mod;
int qpow(int a,int b){
if(b==1) return a;
else if(b==0) return 1;
else{
int ans=qpow(a,b/2)%mod;
int ans1=(ans%mod)*(ans%mod)%mod;
if(b%2==1){
ans1=((ans1%mod)*(a%mod))%mod;
}
return ans1%mod;
}
}
signed main(){
cin>>a>>b>>mod;
cout<<a<<"^"<<b<<" mod "<<mod<<"="<<qpow(a,b)%mod;
return 0;
}

浙公网安备 33010602011771号