zoukankan      html  css  js  c++  java
  • [OI笔记]关于一类带∑的式子的快速求和

    (S(n) = sumlimits_{i<=n} i^ka^i)

    这个式子来源于SP19997

    鱼神的题解里提到,(S(n))这样的式子,可以写成更通用的形式:

    (S(n) = sum f(i)a^i (i <= n),)在本题中,(f(i) = i^k)

    同时也有一个窝不会证明的神仙结论:

    存在一个次数不高于 (k) 的多项式 (g(x)),使得 (S(n)=a^ng(n)-g(0))

    也就是说,我们只要知道(g(n))(g(0)),就可以快速求出这个式子。

    然后我们很容易推得 (g(n)=(g(n-1)+f(n-1))/a)

    又因为(g(n))(k)次多项式,所以(k+1)次差分后其必然是(0),即

    (sumlimits_{i=0}^{k+1}(-1)^iinom{k+1}{i}g(k+1-i)=0)

    然后设个未知数,把(g(0)...g(k))都解出来,就可以插值求出(g(n))

    然后就没了。

    复杂度(O(k))

    (upd) (on) (2020.4.28:)

    为什么这个做法有时候会出锅呢(?)

    主要是因为这个做法设未知数解方程的过程中可能出现

    (ax=c,a=0,c eq 0)的情况或者(ax=c,a=0,c=0)的情况(.)

    这时候一般来说是可以特判的(,)比如说当(f(i) = i^0 = 1)的时候就可以直接(O(k))插值做自然数幂和(.)

  • 相关阅读:
    [LeetCode]Sort List
    [LeetCode]Single Number II
    合并两个排序的列表
    翻转链表
    链表中倒数第k个结点
    调整数组顺序使奇数位于偶数前面
    数值的整数次方
    二进制中1的个数
    矩形覆盖
    变态跳台阶
  • 原文地址:https://www.cnblogs.com/s-r-f/p/13581250.html
Copyright © 2011-2022 走看看