洛谷P1630 求和

题目描述

求1^b+2^b+……+a^b的和除以10000的余数。

输入格式

第一行包含一个正整数N,表示共有N组测试数据;

接下来N行,每行包含两个正整数a和b。

【数据规模】

对于30%的数据中,满足N<=10,a,b<=1000;

对于100%的数据中,满足N<=100,a,b<=1000000000;

输出格式

共N行,每行一个对应的答案。

输入输出样例

输入 #1
1
2 3
输出 #1
9

思路:::我们只需对MOD10000的数据进行操作 ( a*b%MOD=a%MOD*b%MOD;)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD=10000;
const int maxn=1e5+5;
int quick(int x,int p)
{
    int ans=1;
    while(p)
    {
        if(p&1){
            ans=ans*x%MOD;
        }
        x=x*x%MOD;
        p=p>>1;
    }
    return ans;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        int ant=0,y=a/MOD;
        a=a%MOD;
        for(int i=1;i<=MOD;i++)
        {
            if(i<=a)//说明之前有y+1个这样的数
            {
                ant=(ant+(y+1)*quick(i,b))%MOD;
            }
            else{//说明前面只有y个这样的数
                ant=(ant+y*quick(i,b))%MOD;
            }
        }
        printf("%d\n",ant);
    }
    return 0;
}

 

posted @ 2019-08-29 16:48  sj-_-js  阅读(232)  评论(0编辑  收藏  举报