a^b%p

a^b

求 a 的 b 次方对 p 取模的值。

输入格式
三个整数 a,b,p ,在同一行用空格隔开。

输出格式
输出一个整数,表示a^b mod p的值。

数据范围
1≤a,b,p≤1e9
输入样例:
3 2 7
输出样例:
2

时/空限制: 1s / 32MB

这道题刚看会发现诶,直接循环就完了嘛,但是一看下面的数据范围就会发现,如果直接循环,一定会超时。

那怎么做呢?

这里就是一个典型快速幂的题目,我们可以吧a^b分解,利用二进制的特性,从低位乘到高位,如果那一位是0就代表不需要乘,1则反之。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b,p;
	cin>>a>>b>>p;
	int res=1%p;//防止p是0的情况出现 
	while(b)
	{
		if(b&1)	res*=1ll*a%p;//1ll是把res和a强转为long long 
		a*=1ll*a%p;
		b>>=1;//b右移 
	}
	cout<<res<<endl;
	return 0;
}
全部评论

相关推荐

09-01 11:31
门头沟学院 Java
buul:七牛云的吧,感觉想法是好的,但是大家没那么多时间弄他这个啊。。。不知道的还以为他是顶尖大厂呢还搞比赛抢hc,只能说应试者的痛苦考察方是无法理解的,他们只会想一出是一出
点赞 评论 收藏
分享
码农顶针:估计让你免费辅导老板孩子的学习
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务