伯努利数法

伯努利数原本就是处理等幂和的问题,可以推出

$$ \sum_{i=1}^{n}i^k={1\over{k+1}}\sum_{i=1}^{k+1}C_{k+1}^i*B_{k+1-i}*(n+1)^i $$

因为

$$\sum_{k=0}^nC_{n+1}^kB_k=0(B_0=1)$$

所以

$$ B_n={- {1\over{n+1}}}(C_{n+1}^0B_0+C_{n+1}^1B_1+……C_{n+1}^{n-1}B_{n-1})$$

伯努利数的证明十分复杂,记住即可。

题目

求 $\sum_{i=1}^ni^k \ mod \ (1e9+7)$,$i \leq 10^{18}, k \leq 2000, T \leq 2000$.

分析

直接用上面的公式,预处理伯努利数,时间为为 $O(k^2)$。

有 $O(klogk)$ 的方法求伯努利数,但是比较复杂,以后再学吧。

单次的时间只有 $O(k)$,$T$ 组查询不会超时。

#include<bits/stdc++.h>
using namespace std; typedef long long ll;
const ll mod = 1e9 + ;
const int maxk = + ;
ll n, k; ll C[maxk][maxk], inv[maxk], B[maxk];
void init()
{
//预处理组合数
C[][] = ;
for(int i = ;i < maxk;i++)
{
C[i][] = ;
for(int j = ;j <= i;j++)
C[i][j] = (C[i-][j-] + C[i-][j]) % mod;
}
//预处理逆元
inv[] = ;
for(int i = ;i < maxk;i++)
inv[i] = (mod - mod/i) * inv[mod%i] % mod;
//预处理伯努利数
B[] = ;
for(int i = ;i < maxk-;i++)
{
ll tmp = ;
for(int j = ;j < i;j++)
tmp = (tmp + C[i+][j]*B[j]%mod) % mod;
tmp = tmp * (-inv[i+]) % mod;
B[i] = (tmp + mod) % mod;
}
} ll pw[maxk];
ll cal()
{
n %= mod;    //想一想为什么可以这样做
pw[] = ;
for(int i = ;i <= k+;i++) pw[i] = pw[i-] * (n+) % mod; ll ret = ;
for(int i = ;i <= k+;i++)
ret = (ret + C[k+][i]*B[k+-i]%mod*pw[i]%mod) % mod;
ret = ret * inv[k+] % mod;
return ret;
} int main()
{
init(); int T;
scanf("%d", &T);
while(T--)
{
scanf("%lld%lld", &n, &k);
printf("%lld\n", cal());
} return ;
}

参考链接:https://blog.csdn.net/acdreamers/article/details/38929067

51Node1228序列求和 ——自然数幂和模板&&伯努利数的更多相关文章

  1. 51nod1228 序列求和(自然数幂和)

    与UVA766 Sum of powers类似,见http://www.cnblogs.com/IMGavin/p/5948824.html 由于结果对MOD取模,使用逆元 #include<c ...

  2. CF622F——自然数幂和模板&&拉格朗日插值

    题意 求 $ \displaystyle \sum_{i=1}^n i^k \ mod (1e9+7), n \leq 10^9, k \leq 10^6$. CF622F 分析 易知答案是一个 $k ...

  3. 自然数幂和&伯努利数(Bernoulli)

    二项式定理求自然数幂和 由二项式定理展开得 \[ (n+1)^{k+1}-n^{k+1}=\binom {k+1}1n^k+\binom {k+1}2n^{k-1}+\cdots+\binom {k+ ...

  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. UVA766 Sum of powers(1到n的自然数幂和 伯努利数)

    自然数幂和: (1) 伯努利数的递推式: B0 = 1 (要满足(1)式,求出Bn后将B1改为1 /2) 参考:https://en.wikipedia.org/wiki/Bernoulli_numb ...

  6. HDU 2254 奥运(矩阵高速幂+二分等比序列求和)

    HDU 2254 奥运(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 2254 奥运 题意:  中问题不解释. 分析:  依据floyd的算法,矩阵的k次方表示这个矩阵走了k步.  所以k ...

  7. HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和)

    HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 1588 Gauss Fibonacci 题意:  g(i)=k*i+b;i为变量.  给出 ...

  8. 51nod 1228 序列求和(伯努利数)

    1228 序列求和  题目来源: HackerRank 基准时间限制:3 秒 空间限制:131072 KB 分值: 160 难度:6级算法题  收藏  关注 T(n) = n^k,S(n) = T(1 ...

  9. Codeforces 622F The Sum of the k-th Powers ( 自然数幂和、拉格朗日插值法 )

    题目链接 题意 : 就是让你求个自然数幂和.最高次可达 1e6 .求和上限是 1e9 分析 :  题目给出了最高次 k = 1.2.3 时候的自然数幂和求和公式 可以发现求和公式的最高次都是 k+1 ...

随机推荐

  1. Unity 新手引导

    根据Shader动态生成遮罩 源码地址 圆形遮罩镂空处理脚本: using System; using System.Collections.Generic; using UnityEngine; u ...

  2. python学习-30 总结

    小结 1.map函数: 处理序列中的每个元素,得到结果是一个‘列表’,该‘列表’元素个数及位置与原来一样 2.filter:遍历序列中的每个元素,判断每个元素得到的布尔值,如果是True则留下来,例如 ...

  3. Source Insight 4.0相对路径的设置

    比如在D盘有个51的Firmware工程 里面有几个文件夹存放程序文件,项目文件在Project文件夹里,也就是整个Firmware里的文件都是有用的. Keil项目文件位置. 到这里就可以双击Tem ...

  4. PB 将菜单中的部分按钮设置为某些页面不可选中

    if tab_1.selectedtab = 9 or tab_1.selectedtab = 10 then uo_toolbarstrip.of_enable(uo_toolbarstrip.of ...

  5. mysql 导入sql大文件

    引自:https://dba.stackexchange.com/questions/83125/mysql-any-way-to-import-a-huge-32-gb-sql-dump-faste ...

  6. [cf 1236 E] Alice and the Unfair Game

    题意: 给定一个长度为m的序列$A$,你有一个长度为n的棋盘,可以任选一个位置x作为起点. 在时刻$[1,m+1]$你可以向左或向右移动一格. 设时刻i你移动后所在的位置为$B_i$,你需要满足对于任 ...

  7. LOJ #3103. 「JSOI2019」节日庆典

    题意 给定字符串 \(S\) ,对于 \(S\) 的每个前缀 \(T\) 求 \(T\) 所有循环同构串的字典序最小的串,输出其起始下标.(如有多个输出最靠前的) \(|S| \le 3 \times ...

  8. 【1】TOPK最小的K个数(多种方法比较)

    (头条) 最小的第K个数也是和这题topK一样的思路 1.全排序  时间复杂度O(nlogn) 2.Partiton思想 时间复杂度O(n)  (因为不需要像快排一样对所有的分段都两两Partitio ...

  9. IIS err_connection_timed_out(响应时间过长)

    场景:我在服务器的IIS上部署了一个网站,服务器上可以正常打开,然后我用自己的电脑访问,出现如下错误: 原因:服务器的防火墙对入站规则进行了一些限制. 解决方法:1.打开服务器的防火墙-----> ...

  10. 2019-07-25 php错误级别及设置方法

    在php的开发过程里,我们总是会有一系列的错误警告,这些错误警告在我们开发的过程中是十分需要的,因为它能够提示我们在哪里出现了错误,以便修改和维护.但在网站开发结束投入使用时,这些报错我们就要尽量避免 ...