1228 序列求和 

题目来源: HackerRank

基准时间限制:3 秒 空间限制:131072 KB 分值: 160 难度:6级算法题

 收藏

 关注

T(n) = n^k,S(n) = T(1) + T(2) + ...... T(n)。给出n和k,求S(n)。

例如k = 2,n = 5,S(n) = 1^2 + 2^2 + 3^2 + 4^2 + 5^2 = 55。

由于结果很大,输出S(n) Mod 1000000007的结果即可。

Input

第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 5000)
第2 - T + 1行:每行2个数,N, K中间用空格分割。(1 <= N <= 10^18, 1 <= K <= 2000)

Output

共T行,对应S(n) Mod 1000000007的结果。

Input示例

3
5 3
4 2
4 1

Output示例

225
30
10

#include<bits/stdc++.h>

#define MOD 1000000007

#define P 1000000007

using namespace std;

typedef long long ll;

int T;ll n;int k;

int fac[2005],inv[2005];

int c[2005][2005];

int B[2005];//伯努利数

void init()//伯努利数打表

{

    //Pre(2004);

    B[0]=1;

c[0][0]=1;

    for (int i=1;i<2004;i++)

    {

        for (int j=1;j<=i;j++) c[i][j]=(c[i-1][j-1]+c[i-1][j]) % MOD;

        c[i][0]=1;

    }

     inv[1]=1;

    for (int i=2;i<2001;i++) inv[i]=(ll)inv[MOD % i] * (MOD-MOD/i) % MOD;

    for (int i=1;i<2001;i++)

    {

        B[i]=0;

        for (int k=0;k<i;k++) B[i]=(B[i]+(ll)c[i+1][k]*B[k] % MOD) % MOD;

        B[i]=((ll)B[i]*(-inv[i+1]) % MOD+MOD)%MOD;

    }

}

ll ans;

int main()

{

#ifndef ONLINE_JUDGE

    freopen("in.txt","r",stdin);

#endif // ONLINE_JUDGE

    init();

    ll tmp;

   scanf("%d",&T);

    while (T--)

    {

        cin>>n>>k;

        n++; n%=MOD; tmp=n;

        ans=0;

        for (int i=1;i<=k+1;i++)

        {

            ans=(ans+(ll)c[k+1][i]*B[k+1-i]%MOD*n%MOD) % MOD;

            n=(ll)n*tmp % MOD;

        }

        ans=(ll)ans*inv[k+1] % MOD;

        cout<<ans<<endl;

    }

return 0;

}

51nod 1228 序列求和(伯努利数)的更多相关文章

  1. 51Nod - 1228 序列求和 (自然数幂和+伯努利数)

    https://vjudge.net/problem/51Nod-1228 Description T(n) = n^k,S(n) = T(1) + T(2) + ...... T(n).给出n和k, ...

  2. 51nod 1228 序列求和 ( 1^k+2^k+3^k+...+n^k )

    C为组合数,B为伯努利数 具体推到过程略 参考博客:http://blog.csdn.net/acdreamers/article/details/38929067# (我的式子和博客中的不一样,不过 ...

  3. 51Nod 1228 序列求和

    T(n) = n^k,S(n) = T(1) + T(2) + ...... T(n).给出n和k,求S(n).   例如k = 2,n = 5,S(n) = 1^2 + 2^2 + 3^2 + 4^ ...

  4. 51NOD 1258 序列求和 V4 [任意模数fft 多项式求逆元 伯努利数]

    1258 序列求和 V4 题意:求\(S_m(n) = \sum_{i=1}^n i^m \mod 10^9+7\),多组数据,\(T \le 500, n \le 10^{18}, k \le 50 ...

  5. 51nod 1258 序列求和 V4

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1258 1258 序列求和 V4  基准时间限制:8 秒 空间限制:131 ...

  6. [51nod 1822]序列求和

    \(k\leq 200000\) 考虑转化成枚举 \(k\) 的形式 我们错位相减! \[A_k=\sum_{i=1}^N i^K\times R^i \\ RA_k=\sum_{i=2}^{N+1} ...

  7. [51nod]1229 序列求和 V2(数学+拉格朗日差值)

    题面 传送门 题解 这种颓柿子的题我可能死活做不出来-- 首先\(r=0\)--算了不说了,\(r=1\)就是个裸的自然数幂次和直接爱怎么搞怎么搞了,所以以下都假设\(r>1\) 设 \[s_p ...

  8. 【51Nod1258】序列求和V4(FFT)

    [51Nod1258]序列求和V4(FFT) 题面 51Nod 多组数据,求: \[Ans=\sum_{i=1}^ni^k,n\le 10^{18},k\le50000\] 题解 预处理伯努利数,时间 ...

  9. HDU 5358 First One 求和(序列求和,优化)

    题意:给定一个含n个元素的序列,求下式子的结果.S(i,j)表示为seq[i...j]之和.注:对于log20可视为1.数据量n<=105. 思路:即使能够在O(1)的时间内求得任意S,也是需要 ...

随机推荐

  1. jQ的toggle() 方法

    语法:$(selector).toggle(speed,callback,switch) 实例: <script src="js/jquery.min.js">< ...

  2. navicat连接 mysql报错1251解决方案

    转自:https://blog.csdn.net/XDMFC/article/details/80263215 好不容易安装好mysql,但又出现了mysql客户端版本太低的问题.根据参考的这篇博客, ...

  3. python 并发编程目录

    操作系统介绍 操作系统发展史 进程理论 多进程 多线程 协程 io模型

  4. python 并发编程 多线程与多进程的区别

    1.开进程的开销远大于开线程 2 同一进程内的线程共享该进程的数据,进程之间地址空间是隔离的 1 开进程的开销远大于开线程 from multiprocessing import Process de ...

  5. 运维日常之机房浪潮服务器硬盘红灯亮起,服务器一直响,raid磁盘红色。。。故障解决方法

    按Ctrl+H进入到WebBIOS内,看见的错误如下所示: 错误是PDMissing,只不过维护的IBM服务器错误的磁盘不是第一块,而是第三块而已,不过坏哪块硬盘没有影响,重要的是错误的原因.这种错误 ...

  6. MySQL数据库的常见操作

    1.查看所有的数据库 1 show databases; 2.创建数据库  后面的时编码格式 1 create database dbName charset='utf8'; 3.使用/切换数据库 1 ...

  7. 修建泳池&最大子矩阵

    [题目描述] 夏天到了,学校打算在教学楼后面的空地上挖一个泳池供大家使用. 经过实地勘察,这块土地可以划分成N 行M 列的方格,有的方格是树,有的方格是空地.现在要找一块最大的矩形空地修建泳池,请问泳 ...

  8. C++学习——在C文件中调用C++文件中的函数

    1.CPP文件中的内容 #include "mytest.h" #include <iostream> using namespace std; int add(con ...

  9. python 向下取整,向上取整,四舍五入

    # python 向下取整 floor 向上取整ceil 四舍五入 round import math num=3.1415926 # 向上取整 print(math.ceil(num)) # 向下取 ...

  10. Linux免密登陆设置了免密登陆为啥还需要输入密码

    一.设置了免密码登陆但是还是需要输入密码: 权限保证:1.authorized-keys 的权限为 600 2.home.账户所在的目录如hadoop..ssh这三个文件的权限都必须设置为700,缺少 ...