快速幂笔记

快速幂笔记

问题

给你三个整数 \(a\) , \(b\) , \(p\) ,求 \(a^b \bmod p\)

思路

如果直接算复杂度太高了,我们考虑优化。
我们知道 \(a^b\) 有两种情况,一种是 \(n\) 为偶数,一种是 \(n\) 为奇数。
因为 \(a^{m+n}=a^m+a^n\) ,所以当 \(n\) 为偶数时 \(a^n=a^{n/2}*a^{n/2}\) ,而当 \(n\) 为奇数时,则在此基础上再多乘上一个 \(a\) 就可以了。

#include<bits/stdc++.h>
using namespace std;
#define int long long
int a,b,p;
int qmi(int a,int b,int p){
	int x=1;
	while(b){
		if(b&1) x=x*a%p;
		a=a*a%p;
		b/=2;
	}
	return x;
}
signed main(){
	cin>>a>>b>>p;
	printf("%lld^%lld mod %lld=%lld\n",a,b,p,qmi(a,b,p));
	return 0;
}

水完了。

yingxilin
JX の joker
2024-12-22

posted @ 2024-12-22 16:28  Qian·JXのjoker  阅读(14)  评论(0)    收藏  举报