标签:
Description
Input
Output
(A1B1+A2B2+ ... +AHBH)mod M.
Sample Input
3
16
4
2 3
3 4
4 5
5 6
36123
1
2374859 3029382
17
1
3 18132
Sample Output
2
13195
13
题意:首先输入z组测试数据,然后输入俩整数,隔行分开,前者为M,后者代表接下来输入H行数据,每行俩整数a、b,求所有a的b次方相加后对M取模
思路:1:a的b次方采用快速幂
2:(a+b)%mod = (a%mod + b%mod)%mod
代码如下:
1 #include<cstdio> 2 __int64 fun(int n, int m, int mod) 3 { 4 __int64 ans=1,base=n; 5 while(m) 6 { 7 if( m&1 )/*为奇数时为真 */ ans=(base*ans)%mod; 8 base=(base*base)%mod; 9 m>>=1;//相当于 m=m/2 10 } 11 return ans; 12 } 13 int main() 14 { 15 int t; 16 scanf("%d",&t); 17 while( t-- ) 18 { 19 __int64 M, H, a, b, i, j, k, mod=0; 20 scanf("%I64d %I64d",&M, &H); 21 for(i=0; i<H; i++) 22 { 23 scanf("%I64d %I64d", &a, &b); 24 k = fun(a, b, M); 25 mod = (mod%M + k) % M;//k已经提前对M取余 26 } 27 printf("%I64d\n",mod); 28 } 29 return 0; 30 }
标签:
原文地址:http://www.cnblogs.com/123tang/p/5744950.html