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

C为组合数,B为伯努利数
具体推到过程略
参考博客:http://blog.csdn.net/acdreamers/article/details/38929067#
(我的式子和博客中的不一样,不过思想是一样的)
具体见代码:
const int MOD = + ; const int maxn = + ;
LL C[maxn][maxn];
LL inv[maxn];
LL B[maxn];
LL n, k;
void init()
{
scanf("%lld%lld", &n, &k);
} void getC()
{
C[][] = ;
for(int i = ; i < maxn; i++) {
C[i][] = C[i][i] = ;
for(int j = ; j < i; j++)
C[i][j] = (C[i-][j] + C[i-][j-]) % MOD;
}
} void getInv() //O(n) 求所有逆元
{
inv[] = ;
for (int i = ; i < maxn; i++)
{
inv[i] = (MOD - MOD / i) * inv[MOD % i] % MOD;
}
} void getB() //求伯努利数
{
B[] = ;
for (int i = ; i < maxn - ; i++)
{
for (int j = ; j < i; j++)
{
B[i] = (B[i] + C[i+][j] * B[j]) % MOD;
}
B[i] = (-inv[i+] * B[i] % MOD + MOD) % MOD;
}
} LL ni[maxn];
void solve()
{
n %= MOD; //1e18会爆
ni[] = ;
for (int i = ; i <= k + ; i++) ni[i] = ni[i-] * (n + ) % MOD;
LL ans = ;
for (int i = ; i <= k; i++)
{
ans = (ans + C[k+][i] * ni[k+-i] % MOD * B[i] % MOD) % MOD;
}
ans = ans * inv[k+] % MOD;
printf("%lld\n", ans);
} int main()
{
getInv();
getC();
getB();
int T;
scanf("%d", &T);
while (T--)
{
init();
solve();
}
return ;
}
51nod 1228 序列求和 ( 1^k+2^k+3^k+...+n^k )的更多相关文章
- 51nod 1228 序列求和(伯努利数)
1228 序列求和 题目来源: HackerRank 基准时间限制:3 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 T(n) = n^k,S(n) = T(1 ...
- 51Nod - 1228 序列求和 (自然数幂和+伯努利数)
https://vjudge.net/problem/51Nod-1228 Description T(n) = n^k,S(n) = T(1) + T(2) + ...... T(n).给出n和k, ...
- 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^ ...
- 51nod 1258 序列求和 V4
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1258 1258 序列求和 V4 基准时间限制:8 秒 空间限制:131 ...
- 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 ...
- [51nod 1822]序列求和
\(k\leq 200000\) 考虑转化成枚举 \(k\) 的形式 我们错位相减! \[A_k=\sum_{i=1}^N i^K\times R^i \\ RA_k=\sum_{i=2}^{N+1} ...
- [51nod]1229 序列求和 V2(数学+拉格朗日差值)
题面 传送门 题解 这种颓柿子的题我可能死活做不出来-- 首先\(r=0\)--算了不说了,\(r=1\)就是个裸的自然数幂次和直接爱怎么搞怎么搞了,所以以下都假设\(r>1\) 设 \[s_p ...
- 【51Nod1258】序列求和V4(FFT)
[51Nod1258]序列求和V4(FFT) 题面 51Nod 多组数据,求: \[Ans=\sum_{i=1}^ni^k,n\le 10^{18},k\le50000\] 题解 预处理伯努利数,时间 ...
- HDU 5358 First One 求和(序列求和,优化)
题意:给定一个含n个元素的序列,求下式子的结果.S(i,j)表示为seq[i...j]之和.注:对于log20可视为1.数据量n<=105. 思路:即使能够在O(1)的时间内求得任意S,也是需要 ...
随机推荐
- Linux下man安装及使用方法
常用法: man [section] name 其中: section 指的是手册页的哪个部分,可以是1.2.3…8.,若不指定,man会按照次序依次查找,知道找到第一个. name 指的是某个命令. ...
- pushlet
自己准备做一个小游戏,租个云服务,然后挂在网上,可以跟同学一起玩,不过首先布置的是,这个游戏是否能实现,多人在线网页游戏,考虑到是否能够实时查询,在网上借鉴了下聊天原理,http长连接,搜索到push ...
- kmod编译找不到函数kmod_log
编译报错: /usr/bin/ld: Warning: gc-sections option ignored libkmod/.libs/libkmod-util.a(libkmod-util.o): ...
- sqlserver 2008 孤立用户解决方法
从别一台服务器上得到一个数据库备份.还原到本地,数据库中的用户无法登录,也就是联机帮助中说的还原备份可能产生的孤立用户问题. 一.新建一个 MyDataBase 数据库 二.把备份文件放到 C 盘根目 ...
- Go语言test之类方法测试
Go语言提供了完善的单元测试支持,开发人员可以方便的编写测试代码,保证自己代码的质量.在目前的例子中,一般看到都是普通函数的例子.下面我将通过类方法的单元测试例子来展示一下Go语言的魅力. 首先是代码 ...
- Linux代码的重用与强行卸载Linux驱动
(一)Linux代码的重用 重用=静态重用(将要重用的代码放到其他的文件的头文件中声明)+动态重用(使用另外一个Linux驱动中的资源,例如函数.变量.宏等) 1.编译是由多个文件组成的Linux驱动 ...
- JS弹窗数据带回
父窗口代码: function selectCar_Team_Info(){ //var url = "<%=basepath_%>ec/jsp/carLoading/carTe ...
- i++与++i
#include <stdio.h> int main() { int a,b,c,d; a = 10; b = a++;//相当于两个句子:b = a,a += 1;先使用a的值再加1 ...
- android自定义按键
android自带菜单键.返回键.搜索键的重写 转自:http://blog.sina.com.cn/s/blog_7cb9b3b801015yk8.html 返回键 public void on ...
- 【LeetCode OJ】Validate Binary Search Tree
Problem Link: https://oj.leetcode.com/problems/validate-binary-search-tree/ We inorder-traverse the ...