快速幂

前题引入

我们平时用的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;
}

完结撒花,bye

posted @ 2025-09-17 22:32  pihongyi  阅读(15)  评论(0)    收藏  举报