快速幂

石大快速幂
a ^ b = a * a * a * ...... * a
= a ^ ( b / 2 ) * a ^ ( b / 2 )
=.......此处可以拆分下去(递归)
or
b = 2 ^ 0 * x+2 ^ 1 * y+.........
下面是第二种方法的实现

#include<iostream>

typedef long long ll;
using namespace std;
ll a,b,p;
ll fastpow(ll a,ll b,ll p)
{
	ll ans=1%p;
	while(b)
	{
		if(b&1)
		ans=(ll)ans*a%p;
		a=(ll)a*a%p;
		b>>=1;
	}
	return ans;
 } 
int main()
{
	cin>>a>>b>>p;
	cout<<fastpow(a,b,p);
	return 0;
	
}
posted @ 2021-09-15 15:48  qbning  阅读(28)  评论(0编辑  收藏  举报
描述