poj 1995 Raising Modulo Numbers

//题意:计算(A1^B1+A2^B2+ ... +AH^BH)mod M.
#include <iostream> //快速幂取模
#include <stdio.h>

using namespace std;
int power(int a,int b,int m) //快速幂取模计算 (a^b)%m
{

if(a==0)
return 0;
else if(b==0)
return 1;
int r=a%m,k=1; //中间运算过程(k*r,r*r)不会超int范围,m<=45000,m*m<INT_MAX
while(b>1)

{
if((b&1)==1)
k=(k*r)%m;
r=(r*r)%m;
b=b>>1;
}
return (r*k)%m;
}
int main()
{
int cases,m,h,A,B;
scanf("%d",&cases);
while(cases--)
{
int sum=0;
scanf("%d%d",&m,&h);
for(int i=0;i<h;++i) //计算(A1^B1+A2^B2+ ... +AH^BH)mod M.
{

scanf("%d%d",&A,&B);
sum+=power(A,B,m);
sum%=m;
}
printf("%d\n",sum);
}
return 0;
}

posted on 2012-03-09 11:31  sysu_mjc  阅读(139)  评论(0编辑  收藏  举报

导航