P1226 【模板】快速幂||取余运算(洛谷)

原题传送门

P1226 【模板】快速幂||取余运算(洛谷)_第1张图片
思路:这题有两种做法:递归和迭代。我这里用的是迭代求法,先定义长整型变量并赋值,接下来判断指数的二进制末尾是否为1,若1则为奇数,累积上a,然后令底数b求平方,再将指数p的二进制向右移1位,一直重复这个过程直到p<=0结束

代码参考

#include
using namespace std;
typedef long long ll;
int main()
{
     
	ll b,p,k,ans;
	cin>>b>>p>>k;
	ans=1;
	cout<<b<<"^"<<p<<" mod "<<k<<"=";
	while(p > 0){
     
		if(p & 1)//b的二进制末尾为1,即奇数
			ans = ans * b % k;
		b = b * b % k;
		p >>= 1;//将b的二进制向右移1位数
	}
	cout<<ans%k;
	return 0;
}

你可能感兴趣的:(洛谷普及组,算法,数据结构,c++)