快速幂(模板)

快速幂原理就是将emm
比如求n的m次方nm那么就将m转化为2进制数
对每一位进行判断,如果当前位数为1就进行一次乘法,同时每次判断后的乘数为n的当前判断的m的位数的幂。
假设当前已经判断到2进制下m的第k位位数上为一那么乘上nk
代码好懂

#include

#define ll long long

using namespace std;

int n,m,k,p;
int ans = 1;
inline ll mi(ll m, ll n){//m的n次幂;
	ans = 1;
	ll temp = m,s = n;
	while(temp != 0){
		if(temp%2 == 1) ans = ans * s % k;
		temp /= 2;
		s = s * s % k;
	}
	return ans;
}
int main()
{
	while(~scanf("%d%d%d",&m,&n,&k)){
		mi(m, n);
		printf("%d\n",ans);
	}
	return 0;
}

你可能感兴趣的:(分治)