多项式,就是提供了一个代数手段解决问题。——rsy
1 多项式的次数
1.1 差分法
考虑一个数列 {an}。其是一个关于 n 的 v 次多项式。
对数列做 d 阶差分之后变成一个非零常数数列(所有 ai 都是一个固定的非零常数)等价于多项式的次数为 d。
证明:
考虑 an=v∑i=1wini。
那么 an−an−1 的 v 次项相减是这样的:
wvnv−wv(n−1)v
注意到 nv 系数清零。因此多项式降低一次。
归纳即可。
(对于 n 你发现可以代入一些数字,但是其是多项式主元,而常数和 n 无关的就不在次数里了)
【题意】
求 n∑i=1ik。
n≤109,k≤106。
【分析】
为什么这个式子是 k+1 次多项式?
考虑 a1=1k,a2=1k+2k...
差分一次之后变成 1k,2k,...,nk 显然为 k 次多项式。
证完了。
然后就可以插值。计算 ik 可以线性筛,因为它是完全积性函数。
时间复杂度 O(k)。
【题意】
给定两个多项式 f(x) 和 g(x),其中 g(x)=f(x+t)。给定多项式的次数 d 以及 0∼d 处的点值,求 t。
【分析】
考虑 d−1 次差分之后会变成一个一次函数(等差数列)。Δd−1f 放到坐标轴上,往左平移 t 个单位,就是 Δd−1g 了。

代数形式是:ax+b→a(x+t)+b,x 固定的情况下差值为 at,于是除以 a(斜率)即可。
你如果换成别的次数(大于 0)也能算,但是解的就是高次方程了。
d−1 阶差分怎么做:
a0a1a2a3a4a1−a0a2−a1a3−a2a4−a3a2−2a1+a0a3−2a2+a1a4−2a3+a2a3−3a2+3a1−a0a4−3a3+3a2−a1
也即 Δdfi=d∑j=0ai−j×(dj)×(−1)i−j。
斜率是什么?Δd−1fd−Δd−1fd−1。
【题意】
给定 n,k 和数组 a1,...,an,求出 {bn} 使得:
bi=i∑j=1(jk)ai−j+1mod998244353
1≤n≤107,1≤k≤5
【分析】
我们列出每一项的展开形式:
b1=(1k)a1b2=(2k)a1+(1k)a2b3=(3k)a1+(2k)a2+(1k)a3...
对于多项式 fn=(nk),其是一个 k 次多项式,因为它等于 n[k]k!。
那么我们如果对数列 b1,b2,... 做 k 阶差分会变成常数。打表不难发现常数为 1。
于是我们构造:
c1=a1c2=a1+a2c3=a1+a2+a3...
再对 c 数组做 k 阶差分即可。时间复杂度 O(nk)。
另解:
考虑 (ij)=(i−1j−1)+(i−1j),那么如果令 Bi,j 表示 k=j 的时候 bi 是多少,那么 Bi,j=Bi−1,j−1+Bi−1,j+(1j)ai。可以递推得到,时间复杂度也是 O(nk)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下