zoukankan      html  css  js  c++  java
  • 洛谷P1630 求和

    题目:https://www.luogu.org/problemnew/show/1630

    题目描述

    求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

    解析

    暴力分30分还用我解释吗( ﹁ ﹁ ) ~→

    就算你用了快速幂,for循环一遍,还是30分( ﹁ ﹁ ) ~→

    当你不会的时候,就看看范围啊。。

    mod10000,只有一万(⊙ω⊙)

    我们可以算出mod10000相同的数,分在一组,比如2333和23333和233333就分在一组,

    然后,这一组有多少个数,我就把这个组的数快速幂求出b次方然后乘组中元素个数就行啦(详情看代码)。

    只要不忘了%mod和开long long 和多组数据就没什么问题啦。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 using namespace std;
     7 #define ll long long
     8 #define mod 10000
     9 ll n,tmp;
    10 ll a,b,ans;
    11 ll times,max_n;
    12 ll ksm(ll x,ll p){
    13     ll ans=1;
    14     while (p){
    15         if (p&1) ans=(ans*x)%mod;
    16         x=(x*x)%mod;
    17         p=p>>1;
    18     }
    19     return ans;
    20 } 
    21 int main(){
    22     cin>>n;
    23     while (n--){
    24         ans=0;
    25         cin>>a>>b;
    26         times=a/10000;
    27         max_n=a%10000;
    28         for (ll i=1;i<=9999;++i){
    29             tmp=ksm(i,b);
    30             if (i<=max_n){
    31                 ans=(ans+tmp*(times+1))%mod;
    32             }else{
    33                 ans=(ans+tmp*times)%mod;
    34             }
    35         }
    36         printf("%lld
    ",ans);
    37     }
    38     return 0;
    39 }
    View Code
  • 相关阅读:
    javascript 压缩空格代码演示
    javascript 正则表达式代码
    数据筛选和排序
    实现win的on程序数据更新
    使用listview控件展示数据
    初始windows程序
    构建布局良好的windows程序
    ADO.NET访问数据库
    模糊查询
    基本查询
  • 原文地址:https://www.cnblogs.com/gjc1124646822/p/7797343.html
Copyright © 2011-2022 走看看