算法竞赛备赛——【数论】快速幂

快速幂

计算a的b次方

时间复杂度:O(logb)

#include
using namespace std;
const int N=1e5+9;
using ll=long long;
#define mod 998244353

ll ksm(ll a,ll b){
	ll res=1;
	//a=2 b=13--1101
	while(b){					//res=2 a=2^2 b=6		//体现倍增思想
		if(b&1) res=res*a%mod;	//res=2 a=2^4 b=3		//
		b>>=1;					//res=2^5 a=2^8 b=1
		a=a*a%mod;				//res=2^13 a=2^16 b=0
	}
	return res%mod;
}

int main(){ 
	ll a,b;
	cin>>a>>b;
	cout<

例题:P1226 【模板】快速幂 - 洛谷

#include
using namespace std;
using ll=long long;
	
ll qsm(ll a, ll b,ll p) {
	ll sum=1;
	while(b!=0){
		if(b%2==1) sum=(sum*a)%p;
		b/=2;
		a=(a*a)%p;
	}
	return sum%p;
}

int main(){
	ll a,b,p; 
	cin>>a>>b>>p;
	ll ans=qsm(a,b,p)%p;
	cout<

你可能感兴趣的:(算法竞赛备赛,算法,c++,数据结构,蓝桥杯)