这道题题目真长。。
还难理解,读了大半天,愣是没搞懂。。好吧,让我试着来翻译一下
:先输入一个数t,代表t组测试样例;接下来每个样例中有一个数M,下一行H,接下来H行是选手所拿的纸片上的数字Ai,Bi(可以定义两个数组),而你需要计算出各个Ai^Bi相加后的和再对M取余的值。
还难理解,读了大半天,愣是没搞懂。。好吧,让我试着来翻译一下
:先输入一个数t,代表t组测试样例;接下来每个样例中有一个数M,下一行H,接下来H行是选手所拿的纸片上的数字Ai,Bi(可以定义两个数组),而你需要计算出各个Ai^Bi相加后的和再对M取余的值。#include<cstdio>
long long pow(long long a,long long p,long long m){
long long ans=1,base=a;
while(p){
if(p&1)
ans=(base*ans)%m;
base=(base*base)%m;
p>>=1;
}
return ans;
}//快速幂求模
int main(){
long long z,sum;
int m,n,a[50001],b[50001];//数组a,b分别存放Ai,Bi
scanf("%d",&z);
while(z--){
sum=0;
scanf("%d%d",&m,&n);
for(int i=0;i<n;i++)
scanf("%d %d",&a[i],&b[i]);
for(int i=0;i<n;i++)
sum=(sum+pow(a[i],b[i],m))%m;//边求和边取余,防止数据超限
printf("%lld\n",sum);
}
return 0;
}
2万+

被折叠的 条评论
为什么被折叠?



