快速幂(模板)

版权声明:本博客版权属于BIGBIGPPT,未经允许不得商用 https://blog.csdn.net/BIGBIGPPT/article/details/88410588

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

#include<bits/stdc++.h>

#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",&n,&m,&k)){
		mi();
		printf("%d\n",ans);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/BIGBIGPPT/article/details/88410588