二项式定理求自然数幂和

由二项式定理展开得

\[(n+1)^{k+1}-n^{k+1}=\binom {k+1}1n^k+\binom {k+1}2n^{k-1}+\cdots+\binom {k+1}kn+1
\]

那么,对于所有的\(n=1,2,3,\cdots\)累加得到

\[(n+1)^{k+1}-1=\binom{k+1}1\sum_{i=1}^ni^k+\binom{k+1}2\sum_{i=1}^ni^{k-1}+\cdots+\binom {k+1}k\sum_{i=1}^ni+n
\]

进一步得到

\[\sum_{i=1}^ni^k=\frac1{k+1}[(n+1)^{k+1}-(\binom{k+1}2\sum_{i=1}^ni^{k-1}+\cdots+\binom {k+1}k\sum_{i=1}^ni+n+1)]
\]

计\(S(n,k)=\sum_{i=1}^ni^k\),可以得到

\[S(n,k)=\frac1{k+1}[(n+1)^{k+1}-(\binom{k+1}2S(n,k-1)+\cdots+\binom {k+1}kS(n,1)+n+1)]
\]

当\(k==1\),有\(S(n,1)=\frac{n\cdot(n+1)}{2}\)。

加入记忆化即可。

伯努利数

\[\sum_{i=1}^ni^k=\frac{1}{k+1}\sum_{i=1}^{k+1}\binom {k+1}iB_{k+1-i}(n+1)^i
\]

伯努利数满足\(B_0=1\),且有

\[\sum_{k=0}^n\binom{n+1}kB_k=0
\]

那么有

\[B_n=-\frac1{n+1}(\binom{n+1}0B_0+\binom{n+1}1B_1+\dots+\binom{n+1}{n-1}B_{n-1})
\]

这样就可以\(O(n^2)\)预处理出伯努利数。

还可以对\(B_i\)构建指数型生成函数

\[B(x)=\sum_{i=0}^\infty \frac{B_i}{i!}x^i
\]

经过我也不懂得化简得到

\[\begin{split}
B(x)=\frac{x}{e^x-1}\\
B[x]=ifac[x+1]
\end{split}
\]

可以利用多项式求逆在\(O(n\log n)\)计算伯努利数。

例题 51nod 1228 序列求和

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#define MAXN 0x7fffffff
typedef long long LL;
const int N=10005,K=2005,mod=1e9+7;
using namespace std;
inline LL Getint(){register LL x=0,f=1;register char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}return x*f;}
int inv[N],fac[N],ifac[N],B[N];
int C(int n,int m){
if(n<m)return 0;
return (LL)fac[n]*ifac[m]%mod*ifac[n-m]%mod;
}
int S(LL n,int k){
int ret=0;
LL ori=(n+1)%mod,fac=ori;
for(int i=1;i<=k+1;i++,fac=(LL)fac*ori%mod)
ret=(ret+(LL)C(k+1,i)*B[k+1-i]%mod*fac)%mod;
return (LL)(ret+mod)%mod*inv[k+1]%mod;
}
int main(){
inv[1]=fac[0]=ifac[0]=1;
for(int i=2;i<=K;i++)inv[i]=(LL)inv[mod%i]*(mod-mod/i)%mod;
for(int i=1;i<=K;i++)fac[i]=(LL)fac[i-1]*i%mod;
for(int i=1;i<=K;i++)ifac[i]=(LL)ifac[i-1]*inv[i]%mod;
B[0]=1;
for(int i=1;i<=K;i++){
for(int j=0;j<i;j++)
B[i]=(B[i]-(LL)B[j]*C(i+1,j))%mod;
B[i]=(LL)B[i]*inv[i+1]%mod;
}
int T=Getint();
while(T--){
LL n=Getint(),k=Getint();
cout<<S(n,k)<<'\n';
}
return 0;
}

自然数幂和&伯努利数(Bernoulli)的更多相关文章

  1. UVA766 Sum of powers(1到n的自然数幂和 伯努利数)

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

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

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

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

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

  4. 【BZOJ】3453: tyvj 1858 XLkxc 拉格朗日插值(自然数幂和)

    [题意]给定k<=123,a,n,d<=10^9,求: $$f(n)=\sum_{i=0}^{n}\sum_{j=1}^{a+id}\sum_{x=1}^{j}x^k$$ [算法]拉格朗日 ...

  5. 51Node1228序列求和 ——自然数幂和模板&&伯努利数

    伯努利数法 伯努利数原本就是处理等幂和的问题,可以推出 $$ \sum_{i=1}^{n}i^k={1\over{k+1}}\sum_{i=1}^{k+1}C_{k+1}^i*B_{k+1-i}*(n ...

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

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

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

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

  8. 洛谷P5437/5442 约定(概率期望,拉格朗日插值,自然数幂)

    题目大意:$n$ 个点的完全图,点 $i$ 和点 $j$ 的边权为 $(i+j)^k$.随机一个生成树,问这个生成树边权和的期望对 $998244353$ 取模的值. 对于P5437:$1\le n\ ...

  9. 求自然数幂和 B - The Sum of the k-th Powers CodeForces - 622F

    题解: 很多方法 斯特林数推导略麻烦但是不依赖于模数 代码: 拉格朗日插值 由于可以证明这是个K+1次多项式于是可以直接用插值 #include <bits/stdc++.h> using ...

随机推荐

  1. 算法竞赛模板 KMP

    KMP算法图解: ① 首先,字符串“BBC ABCDAB ABCDABCDABDE”的第一个字符与搜索词“ABCDABD”的第一个字符,进行比较.因为B与A不匹配,所以搜索词后移一位. ② 因为B与A ...

  2. css 实现水波纹,波浪动画效果

    <div class="wave"> 水波纹效果 <div class="wave1"></div> <div cla ...

  3. 一句话的Android增量更新框架(增量更新)

    转自:http://www.jianshu.com/p/a9ec8fa780e2 Android应用更新要使用完整的新版本Apk安装,增量更新则是提供一个新旧版本偏差数据的patch包供应用下载,然后 ...

  4. 安卓8.0真机运行appium1.4遇到的问题:运行自动化脚本,手机自动安装 settings.apk和unclock.apk,执行脚本时提示安装UnicodeIME-debug.apk失败,怎么关掉自动安装?

    运行自动化脚本,手机自动安装 settings.apk和unclock.apk,执行脚本时提示安装UnicodeIME-debug.apk失败,怎么关掉自动安装? 这3个apk的目录分别是: D:\P ...

  5. Vue中的作用域插槽

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 详解 MySQL int 类型的长度值问题

    以下是每个整数类型的存储和范围 (来自 mysql 手册)

  7. leetcode-13双周赛-1256-加密数字

    题目描述:编码 方法一: class Solution(object): def encode(self, n): if n == 0: return "" n -= 1 A = ...

  8. Java刷题笔记

    能用StringBuffer的时候坚决不要用String,因为前者的时间和空间效率都更高. 牛顿法求平方根:随便找一个K,然后不断让 k=(k+x/k)/2;直到K的平方与x之间的差距小于限定值. 斐 ...

  9. 使用用Intellij Idea从Github上获取代码

    1.打开File菜单,选择Setting,在Version Control下找到Github. 2.分别在Login与Password中输入自己在Github注册的用户名和密码,然后点击Test按钮: ...

  10. auth 模块使用篇

    from django.cintrib import auth #登录模块  只要用auth模块一旦登录 就可以在项目的任意地方用request.user 拿到当前的用户对象  再通过 request ...