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

http://acm.nyist.net/JudgeOnline/problem.php?pid=420

2012-03-22 09:51 387 查看

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取余的结果,每个结果单独占一行。 样例输入
210 110 2

样例输出
55 

385

思想:在求一个数的几次幂时,可以用二分法来解决。。

#include<iostream>
#include<string.h>
#define M 10003
using namespace std;
int doit(int i,int p)
{
if(p==1) return i%M;
long long x=doit(i,p/2);
x=x*x%M;
if(p%2)  x=(x%M*i)%M;
return x;
}
int main()
{
int T;
cin>>T;
while(T--)
{
int n,p;
cin>>n>>p;
if(p==0) cout<<n%M<<endl;
else{
int sum=0;
for(int i=1;i<=n;++i)
{
sum=(sum+doit(i,p))%M;
}
cout<<sum<<endl;
}
}return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  测试