[Luogu] P4948 数列求和
Description
给定\(n, a, k\),求\(\sum\limits_{i=1}^ni^ka^i\pmod{1e9+7}\)。
Solution
学习了一种新的推式子方法。
我们令\(f(k)=\sum\limits_{i=1}^ni^ka^i\)。
当\(a>1\)时,\(f(k)=\sum\limits_{i=1}^ni^ka^i\)
\(=\sum\limits_{i=1}^n(i+1)^ka^{i+1}-(n+1)^ka^{n+1}+a\)
\(=\sum\limits_{i=1}^n\sum\limits_{j=0}^ki^j\dbinom{k}{j}a^{i+1}-(n+1)^ka^{n+1}+a\)
\(=a\sum\limits_{j=0}^k\dbinom{k}{j}f(j)-(n+1)^ka^{n+1}+a\)
整理可得\(f(k)=\dfrac{(n+1)^ka^{n+1}-a-a\sum\limits_{j=0}^{k-1}\dbinom{k}{j}f(j)}{a-1}\)
我们容易求出\(f(0)=\sum\limits_{i=1}^na^i=\dfrac{a(a^n-1)}{a-1}\)(等比数列求和)。\(O(k^2)\)递推即可。
当\(a=1\)时,\(f(k)=\sum\limits_{i=1}^ni^k\)
\(=\sum\limits_{i=1}^n(i+1)^k-(n+1)^k+1\)
\(=\sum\limits_{i=1}^n\sum\limits_{j=0}^ki^j\dbinom{k}{j}-(n+1)^k+1\)
\(=\sum\limits_{j=0}^k\dbinom{k}{j}f(j)-(n+1)^k+1\)
整理一下:\((n+1)^k-1=\sum\limits_{j=0}^{k-1}\dbinom{k}{j}f(j)+\dbinom{k}{k}f(k)-f(k)=\sum\limits_{j=0}^{k-2}\dbinom{k}{j}f(j)+\dbinom{k}{k-1}f(k-1)\)
令\(k=k+1\),\(f(k)\dbinom{k+1}{k}=(n+1)^{k+1}-1-\sum\limits_{J=0}^{k-1}\dbinom{k+1}{j}f(j)\)
整理得\(f(k)=\dfrac{(n+1)^{k+1}-1-\sum\limits_{j=0}^{k-1}\dbinom{k+1}{j}f(j)}{k+1}\)
我们容易求出\(f(0)=n\)。\(O(k^2)\)递推即可。
Tips
快速幂运算之前,先要把底数和指数取个模在运算,否则很有可能爆\(long\ long\)!(调了我一个多小时)