做题记录 Newcoder 华华教月月做数学 (快速乘、快速幂
题目描述
链接:https://ac.nowcoder.com/acm/contest/21763/1019
来源:牛客网
找到了心仪的小姐姐月月后,华华很高兴的和她聊着天。然而月月的作业很多,不能继续陪华华聊天了。华华为了尽快和月月继续聊天,就提出帮她做一部分作业。
月月的其中一项作业是:给定正整数A、B、P,求A^B\mod PA
B
modP的值。华华觉得这实在是毫无意义,所以决定写一个程序来做。但是华华并不会写程序,所以这个任务就交给你了。
因为月月的作业很多,所以有T组询问。
题意
求对P取模的AB( A,B,P<=1e18)
思路
- 仅用快速幂会乘法溢出,需要用快速乘实现快速幂
code
#include
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
ll mod;ll qmul(ll a,ll b)
{ll ret=0;while(b){if(b&1)ret=(ret+a)%mod;a=(a<<1)%mod;b>>=1;}return ret;
}ll qpow(ll e,ll x)
{ll ret=1;while(x){if(x&1)ret=qmul(ret,e);e=qmul(e,e);x>>=1;}return ret;
}void solv()
{ll a,b;cin>>a>>b>>mod;cout<<qpow(a,b)<<'\n';}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T=1;cin>>T;while(T--){solv();}return 0;
}
总结
- 注意数据范围,这里用快速乘处理乘法溢出
知识补充
- 用快速乘写快速幂
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
