关闭

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

353人阅读 评论(0) 收藏 举报

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;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:287571次
    • 积分:8017
    • 等级:
    • 排名:第2733名
    • 原创:426篇
    • 转载:6篇
    • 译文:1篇
    • 评论:18条
    最新评论