p次方求和

题目描述

一个很简单的问题,求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

题解:

构造一个函数,用二分法。快速幂取余运算,返回值是a^b%10003的结果,在主函数种调用这个函数。

  注意 用long long 型。因为数可能会大。

代码:

#include<stdio.h>
long long pow(long long a,long long b)
{//返回a^b%c10003
	long long result=1;
	long long p=10003;
	a=a%p;
	while(b>0)
	{
		if(b%2==1)
		result=result*a%p;
		a=a*a%p;
		b/=2;
	}
	return result;
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		long long n,m;
		int i;
		scanf("%lld %lld",&n,&m);
		int sum=0;
		for(i=1;i<=n;i++)
		{
			sum+=pow(i,m);
		}
		printf("%d\n",sum%10003);
	}
	return 0;
 }

猜你喜欢

转载自blog.csdn.net/hanyue0102/article/details/81352246
今日推荐