CF622F 自然數冪和模板 拉格朗日插值

2022-05-01 23:33:17 字數 1407 閱讀 6256

求 $ \displaystyle \sum_^n i^k \ mod (1e9+7), n \leq 10^9, k \leq 10^6$.

cf622f

易知答案是乙個 $k+1$ 次多項式,我們找 $k+2$ 個值代進去,然後拉格朗日插值。

$n+1$ 組點值對 $(x_i, y_i)$,得到 $n$ 次多項式 $f$ 的拉格朗日插值公式為:

$$f(x) = \sum_^n y_i\prod_ \frac$$

時間複雜度為 $o(n^2)$,

如果我們取 $n$ 個連續的值,這樣可以預處理階乘,複雜度降至 $o(n)$,

在這題中複雜度為 $o(k log)$,其中 $o(log mod)$為求逆元的時間。

#includeusing

namespace

std;

typedef

long

long

ll;const ll mod = 1e9 + 7

;const

int maxk = 1000000 + 10

;ll n, k;

ll qpow(ll m, ll n, ll mod)

return

res;

}ll fac[maxk], y[maxk];

//前k+2項字首和都已經算好

ll largrange()

return

ans;

;}int

main()

預處理逆元階乘,此時時間複雜度的瓶頸在求前 $k+2$ 項和,所以總的時間複雜度為 $o(klogk)$。

51nod-1258序列求和v4

#includeusing

namespace

std;

typedef

long

long

ll;const ll mod = 1e9 + 7

;const

int maxk = 5e4 + 10

;ll n, k;

ll qpow(ll m, ll n, ll mod)

return

res;

}ll inv[maxk], fac[maxk];

//階乘的逆元

void

init()

ll y[maxk];

//前 k+2 項自然數 k 次冪和 也就是yi

ll pre[maxk], suf[maxk]; //

字首積 字尾積

ll largrange()

return

ans;

;}int

main()

return0;

}

1. 2.

3. 

解題報告 CF622F

懶得碼字了 很簡單的數論題,紫題顯然是過了些,不要說.對於這個式子,是乙個 k 1 次的多項式,插 k 2 次值就好了,煩人的是處理逆元,我的費馬小定理顯然是 o logp 的,可以用拓歐,聽說還有 o k 的演算法,我似乎感覺不太可能 我太弱了 預處理處階乘,前 字尾積陣列即可,複雜度 o klo...

總結 15 自然數冪和相關

目錄hany01。meowww。我們希望找到乙個演算法求出下面式子的值。s sum i k 一般來說要求時間複雜度不能與 n 有關。乙個有用的結論 s 是乙個關於 n 的 k 1 次多項式。這是乙個中學老師 大概 要講的做法。推導可以用擾動法,也可以用裂項相消法。擾動法 記 s n sum a k ...

自然數冪求和方法2 斯特林數

x n sum limits n left n k end right x x sum limits n left beginn k end right x k 依然用到求兩次的思想 對於 x n 可以理解為用x種顏色給n個點染色 我們有兩種求法 1.每個點有x種染色方案,x n 2.總共染k種顏色...