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是个好特殊的数,它们能把所有可计算的数都巧妙的表示出来,记住就好了,以后有关幂运算的就可以用它了。

posted @ 2013-08-29 08:42  王莜轩  阅读(268)  评论(0编辑  收藏  举报