版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuewenyao/article/details/88567497
题目链接:https://ac.nowcoder.com/acm/contest/392/B?&headNav=acm
题目描述:
找到了心仪的小姐姐月月后,华华很高兴的和她聊着天。然而月月的作业很多,不能继续陪华华聊天了。华华为了尽快和月月继续聊天,就提出帮她做一部分作业。
月月的其中一项作业是:给定正整数A、B、P,求ABmodPABmodP的值。华华觉得这实在是毫无意义,所以决定写一个程序来做。但是华华并不会写程序,所以这个任务就交给你了。
因为月月的作业很多,所以有T组询问。
输入描述:
第一行一个正整数T表示测试数据组数。
接下来T行,每行三个正整数A、B、P,含义如上文。
输出描述:
输出T行,每行一个非负整数表示答案。
输入
2
2 5 10
57284938291657 827493857294857 384729583748273
输出
2
18924650048745
备注:
1≤T≤1031≤T≤103,1≤A,B,P≤10181≤A,B,P≤1018
这是个快速幂加快速乘,各路大神的单吗都比较高大上,可是大神ac代码我为什么编译器上都不让我编译呢,这是什么鬼,附上大神代码:
#include <stdio.h>
typedef __int128 ll;
long long a_b_Mod_c(ll a, ll b, ll p) {
ll s = 1;
while (b) {
if (b & 1)
s = (s * a) % p;
a = (a * a) % p;
b >>= 1;
}
return (long long) s % p;
}
int main() {
int t;
long long a, b, p;
scanf("%d", &t);
while (t--) {
scanf("%lld%lld%lld", &a, &b, &p);
printf("%lld\n", a_b_Mod_c(a, b, p));
}
return 0;
}
#include <iostream>
#include <cstdio>
using namespace std;
#define LL unsigned long long
typedef __int128 ll;
ll quickpow(ll a,ll b,ll p)
{
ll res=1;
a%=p;
while(b!=0)
{
if(b&1)
res=(res*a)%p;
a=(a*a)%p;
b>>=1;
}
return res;
}
int main()
{
int t;
cin>>t;
LL a,b,p;
while(t--)
{
cin>>a>>b>>p;
a%=p;
cout<<(LL)quickpow(a,b,p)<<endl;
}
return 0;
}
在这里我也发上我的ac代码,我使用的python写的,嘿嘿嘿。
s=int(input())
while s!=0:
s -= 1
a,b,p=map(int,input().split())
print(pow(a,b,p))
挺能偷懒的,哈哈哈,python主要是有个pow这个库函数,比较方便