题目描述
一个很简单的问题,求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;
}