链接:https://ac.nowcoder.com/acm/contest/392/B
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
找到了心仪的小姐姐月月后,华华很高兴的和她聊着天。然而月月的作业很多,不能继续陪华华聊天了。华华为了尽快和月月继续聊天,就提出帮她做一部分作业。
月月的其中一项作业是:给定正整数A、B、P,求ABmodPABmodP的值。华华觉得这实在是毫无意义,所以决定写一个程序来做。但是华华并不会写程序,所以这个任务就交给你了。
因为月月的作业很多,所以有T组询问。
月月的其中一项作业是:给定正整数A、B、P,求ABmodPABmodP的值。华华觉得这实在是毫无意义,所以决定写一个程序来做。但是华华并不会写程序,所以这个任务就交给你了。
因为月月的作业很多,所以有T组询问。
输入描述:
第一行一个正整数T表示测试数据组数。
接下来T行,每行三个正整数A、B、P,含义如上文。
输出描述:
输出T行,每行一个非负整数表示答案。
备注:
1≤T≤1031≤T≤103,1≤A,B,P≤1018
水一波博客。
题意很好理解,
因为数据范围比较大,超了ll,所以用快速幂+快速乘。
就是在快速幂的基础上,将快速幂中的乘法拆成加法求余,类似快速幂的快速乘。
代码:
//B
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+; ll mul(ll a,ll b,ll p)
{
ll ans=;
while(b)
{
if(b&) ans=(ans+a)%p;
a=(a+a)%p;
b=b>>;
}
return ans;
} ll Pow(ll a,ll b,ll p)
{
ll result=;
ll base=a%p;
while(b){
if(b&) result=mul(result,base,p)%p;
base=mul(base,base,p)%p;
b=b>>;
}
return result;
} int main()
{
int t;
cin>>t;
while(t--){
ll a,b,mod;
cin>>a>>b>>mod;
cout<<Pow(a,b,mod)<<endl;
}
}
。。。