您的位置:首页 > 理论基础 > 计算机网络

p次方求和 http://acm.nyist.net/JudgeOnline/problem.php?pid=420

2013-08-29 08:42 316 查看

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是个好特殊的数,它们能把所有可计算的数都巧妙的表示出来,记住就好了,以后有关幂运算的就可以用它了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: