题目链接

B51nod1229

题解

我们要求

\[\sum\limits_{i = 1}^{n}i^{k}r^{i}
\]

如果\(r = 1\),就是自然数幂求和,上伯努利数即可\(O(k^2)\)

否则,我们需要将式子进行变形

要与\(n\)无关

\[F(k) = \sum\limits_{i = 1}^{n} i^{k}r^{i}
\]

自然数幂应该是不用去动了,两边乘个\(r\)

\[rF(k) = \sum\limits_{i = 2}^{n + 1}r^{i}(i - 1)^{k}
\]

相减得

\[\begin{aligned}
(r - 1)F(k) &= r^{n + 1}n^{k} - r + \sum\limits_{i = 2}^{n}r^{i}((i - 1)^{k} - i^{k}) \\
&= r^{n + 1}n^{k} - r + \sum\limits_{i = 2}^{n}r^{i}(\sum\limits_{j = 0}^{k}{k \choose j}(-1)^{k - j}i^{j} - i^{k}) \\
&= r^{n + 1}n^{k} - r + \sum\limits_{i = 2}^{n}r^{i}\sum\limits_{j = 0}^{k - 1}{k \choose j}(-1)^{k - j}i^{j} \\
&= r^{n + 1}n^{k} - r + \sum\limits_{i = 2}^{n}\sum\limits_{j = 0}^{k - 1}{k \choose j}(-1)^{k - j}i^{j}r^{i} \\
&= r^{n + 1}n^{k} - r + \sum\limits_{j = 0}^{k - 1}{k \choose j}(-1)^{k - j}\sum\limits_{i = 2}^{n}i^{j}r^{i} \\
&= r^{n + 1}n^{k} - r + \sum\limits_{j = 0}^{k - 1}{k \choose j}(-1)^{k - j}(F(j) - r) \\
\end{aligned}
\]

\[F(k) = \frac{r^{n + 1}n^{k} - r + \sum\limits_{j = 0}^{k - 1}{k \choose j}(-1)^{k - j}(F(j) - r)}{r - 1}
\]

边界

\[F(0) = \sum\limits_{i = 1}^{n}r^{i} = r\frac{r^{n} - 1}{r -1}
\]

同样可以实现\(O(k^2)\)递推

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<cstdio>
  6. #include<vector>
  7. #include<queue>
  8. #include<cmath>
  9. #include<map>
  10. #define LL long long int
  11. #define REP(i,n) for (int i = 1; i <= (n); i++)
  12. #define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
  13. #define cls(s,v) memset(s,v,sizeof(s))
  14. #define mp(a,b) make_pair<int,int>(a,b)
  15. #define cp pair<int,int>
  16. using namespace std;
  17. const int maxn = 2010,maxm = 100005,INF = 0x3f3f3f3f;
  18. inline LL read(){
  19. LL out = 0,flag = 1; char c = getchar();
  20. while (c < 48 || c > 57){if (c == '-') flag = 0; c = getchar();}
  21. while (c >= 48 && c <= 57){out = (out << 1) + (out << 3) + c - 48; c = getchar();}
  22. return flag ? out : -out;
  23. }
  24. const int P = 1000000007;
  25. LL F[maxn],B[maxn],fac[maxn],inv[maxn],fv[maxn],N = 2005;
  26. inline LL qpow(LL a,LL b){
  27. LL re = 1; a %= P;
  28. for (; b; b >>= 1,a = 1ll * a * a % P)
  29. if (b & 1) re = 1ll * re * a % P;
  30. return re;
  31. }
  32. inline LL C(LL n,LL m){
  33. if (m > n) return 0;
  34. return 1ll * fac[n] * fv[m] % P * fv[n - m] % P;
  35. }
  36. void init(){
  37. fac[0] = fac[1] = fv[0] = fv[1] = inv[0] = inv[1] = 1;
  38. for (int i = 2; i <= N; i++){
  39. fac[i] = fac[i - 1] * i % P;
  40. inv[i] = 1ll * (P - P / i) * inv[P % i] % P;
  41. fv[i] = fv[i - 1] * inv[i] % P;
  42. }
  43. B[0] = 1;
  44. for (int k = 1; k < N; k++){
  45. for (int i = 0; i < k; i++)
  46. B[k] = (B[k] + C(k + 1,i) * B[i] % P) % P;
  47. B[k] = 1ll * (P - 1) * inv[k + 1] % P * B[k] % P;
  48. }
  49. }
  50. LL n,K,r;
  51. void work1(){
  52. n %= P;
  53. LL tmp = n,ans = 0;
  54. for (int i = K; ~i; i--){
  55. ans = (ans + C(K + 1,i) * B[i] % P * tmp % P) % P;
  56. tmp = tmp * n % P;
  57. }
  58. ans = ans * inv[K + 1] % P;
  59. printf("%lld\n",(ans + qpow(n,K)) % P);
  60. }
  61. void work2(){
  62. r %= P;
  63. LL tmp = qpow(r,n + 1),t,tt = 1,rv = qpow(r - 1,P - 2);
  64. F[0] = 1ll * (qpow(r,n) + P - 1) % P * rv % P * r % P;
  65. for (int k = 1; k <= K; k++){
  66. t = 0; tt = 1ll * tt * (n % P) % P;
  67. for (int j = 0; j < k; j++)
  68. t = (t + (((k - j) & 1) ? -1ll : 1ll) * C(k,j) * ((F[j] - r) % P) % P) % P;
  69. t = (t + P) % P;
  70. F[k] = ((tmp * tt % P - r) % P + t) % P * rv % P;
  71. }
  72. printf("%lld\n",(F[K] + P) % P);
  73. }
  74. int main(){
  75. init();
  76. int T = read();
  77. while (T--){
  78. n = read(); K = read(); r = read();
  79. if (r == 1) work1();
  80. else work2();
  81. }
  82. return 0;
  83. }

51nod1229 序列求和 V2 【数学】的更多相关文章

  1. 51nod1229 序列求和 V2

    这题...毒瘤吧,可能要写两份代码... 传送门 noteskey 我们考虑这里的复杂度肯定是与 k 相关的,而且平方也是没问题的,那么我们先看看 S(k) 能怎么得到: \[\begin{align ...

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

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

  3. 51nod1229-序列求和V2【数学,拉格朗日插值】

    正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1229 题目大意 给出\(n,k,r\)求 \[\sum_{i=1}^ni ...

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

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

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

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

  6. 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 ...

  7. 51nod 1258 序列求和 V4

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

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

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

  9. 51nod_1236_序列求和 V3 _组合数学

    51nod_1236_序列求和 V3 _组合数学 Fib(n)表示斐波那契数列的第n项,Fib(n) = Fib(n-1) + Fib(n-2).Fib(0) = 0, Fib(1) = 1. (1, ...

随机推荐

  1. 【js】AddFavorite/SetHome提醒用户自行操作加入收藏/设置主页

    除了老版本的ie, 就已经没有浏览器能支持js添加收藏夹和设置首页, 浏览器没有开放这个权限了,external.addFavorite这个给禁了. 不过AddFavorite可以起到提醒用户自行操作 ...

  2. Codeforces round 1111

    CF Div 2 537 比赛链接 感觉题目难度OK,五个题都能做,后俩题考察人的翻译水平... 另外,$Claris$太强了... A 直接按照题意模拟,不知道为啥有人会被× 代码: #includ ...

  3. 记一次SpringMVC碰到的坑

            在SpringMVC中,我们Controller中接收比如表单的参数,只要保证方法的形参的名字和表单中input元素的的name一样就可以接收到参数.         但是,我开发的一 ...

  4. spring 配置 线程池并使用 springtest 进行测试

    在 applicationContext.xml 中配置spring线程池: <!-- 包路径扫描 --> <context:component-scan base-package= ...

  5. LOJ#6503.「雅礼集训 2018 Day4」Magic[容斥+NTT+启发式合并]

    题意 \(n\) 张卡牌 \(m\) 种颜色,询问有多少种本质不同的序列满足相邻颜色相同的位置数量等于 \(k\). 分析 首先本质不同不好直接处理,可以将同种颜色的卡牌看作是不相同的,求出答案后除以 ...

  6. python面试题(四)

    一.数据类型 1.字典 1.1 现有字典 dict={‘a’:24,‘g’:52,‘i’:12,‘k’:33}请按字典中的 value 值进行排序? sorted(dict.items(),key=l ...

  7. 前端示例MVC网站

    前端示例MVC网站 ASP.NET Zero 包含了一个公共web站点的前端页面和一个登陆页面.当您第一次运行项目的时候可以看到,如下图所示: 该前端网站有两个页面,一个是主页和关于我们.这些页面的内 ...

  8. Centos 7 安装mysql5.7.24二进制 版本

    Mysql 二进制安装方法 下载mysql https://dev.mysql.com/downloads/mysql/ 1.解压包 tar xf mysql-5.7.24-linux-glibc2. ...

  9. python3绝对路径,相对路径

    from __future__ import absolute_import的作用: 直观地看就是说”加入绝对引入这个新特性”.说到绝对引入,当然就会想到相对引入.那么什么是相对引入呢?比如说,你的包 ...

  10. c语言数字图像处理(一):bmp图片格式及灰度图片转换

    本篇文章首先介绍了bmp图片格式,主要参考wiki上的内容,包括bmp文件的存储方式,对于一些常见的bmp文件格式都给了例子,并且对8位 16位RGB555 16位RGB565格式的bmp文件进行了简 ...