一个很简单的为题,求1^p+2^p+3^p+.....+n^p的和,输出1^p+2^p+3^p+.....+n^p
对10003取余的结果,每个结果单独占一行
2
10 1
55
10 2
385
#include<stdio.h>
#define N 10003
int main()
{
long long T,n,p,i,b,t,a,sum;
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld",&n,&p);
if(n==0)
{
printf("0\n");
continue;
}
sum=1;
for(i=2;i<=n;i++)
{
a=i;
b=p;
t=1;
while(b)
{
if(b&1)//当b的二进制的末尾是1是为1,当末尾是0时为0,
t=(t*a)%N;//当b的值是奇数时,则进行累计;当b的值为偶数时,跳过,即考虑少乘情况,又对t进行累计
a=(a*a)%N;
b=b/2;
}
sum=(sum+t)%N;
}
printf("%d\n",sum);
}
return 0;
}
思路详解:这是一个比较费脑筋的题,逻辑思维较强,想说的是while部分