NYOJ 420 P次方求和

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

你可能感兴趣的:(NYOJ 420 P次方求和)