p次方求和 http://acm.nyist.net/JudgeOnline/problem.php?pid=420
p次方求和
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
- 一个很简单的问题,求1^p+2^p+3^p+……+n^p的和。
- 输入
- 第一行单独一个数字t表示测试数据组数。接下来会有t行数字,每行包括两个数字n,p, 输入保证0<n<=1000,0<=p<=1000。
- 输出
- 输出1^p+2^p+3^p+……+n^p对10003取余的结果,每个结果单独占一行。
- 样例输入
-
2 10 1 10 2
- 样例输出
-
55 385
- 来源
- 原创
-
#include<stdio.h> int chifang(int m,int q) { int j1=1,j2=m; while(q) { if(q&1) j1=j1*j2%10003; j2=(j2*j2)%10003; q>>=1; } return j1; } int main() { int t; scanf("%d",&t); while(t--) { int i,p,n,sum=0; scanf("%d %d",&n,&p); for(i=1;i<=n;i++) { sum=(sum+chifang(i,p))%10003; } printf("%d\n",sum); } return 0; }
这题一方面用了求N的P次幂节省乘法次数的方法,另一方面又用了模运算定理。关于减少乘法次数的那个算法,我也不太懂,感觉就好像1和2是个好特殊的数,它们能把所有可计算的数都巧妙的表示出来,记住就好了,以后有关幂运算的就可以用它了。