「学习笔记」单位根反演
单位根反演
(千万记得乘 \(\frac{1}n\))
如果 \([n|k]\) 那么都是 \(1\)
反之则用等比数列得到 \(\frac1n \frac{\omega_{n}^{nk}-1}{\omega_{n}^k-1}=0\)
用处是求某个多项式的特定倍数的系数和,也就是:
把枚举上界换掉,大力展开之后就行了
应用
bzoj3328 PYXFIB
求
满足 \(mod \equiv 1 \mod k\),\(F_{ik}\) 为斐波那契数列第 \(ik\) 项
-
关键结论:\(\sum_{i=0}^{n}\binom ni A^i=(A+I)^n\),\(I\) 是单位矩阵
其实也就是矩阵意义下的二项式定理,因为矩阵乘法和加法可以合并进行
那么把原始展开得到的式子合并完了如下:
后面的部分把 \(\omega_{k}^j\) 和矩阵做数乘就行了
复杂度 \(\Theta(Tk+8k\log n)\)
需要预处理原根
Loj 6485 LJJ学二项式定理
把几个独立下来之后,考虑 \(a_0\) 的部分,则有
那么换掉式子就是
二项式定理合并即可,对于剩下的几个,被模数就是 \(i+k\) 其实照样推就行了
代码很好写
UOJ450 复读机
本题也是在某种意义上 \(EGF\) 第一题
- \(\rm{Subtask \ 1}:d=1\)
直接输出 \(k^n\) 即可
以下两个部分均需注意,\(\rm{EGF}\) 的卷积最后乘 \(n!\) 才是正确答案
- \(\rm{Subtask \ 2}:d=2\)
把脑残式子一写:诶这怎么是 \(EGF\) 卷起来的形式呀?
答案即 \(G^k(x)[x^n]\)
问题似乎陷入了死节,但是使用 \(e^x=\sum\limits_{i=0}^{+\infty} \frac{x^i}{i!}\) 变换一下:
使用 \(e^{kx}=\sum\limits_{i=0}^{+\infty} \frac{(kx)^i}{i!}\) 大力展开所有的取出 \(x^n\) 的系数,得到:
使用 \(O(k)\) 的算法可以快速解决这个问题
- \(\rm{Subtask\ 3}:d=3,k\le 1000\)
仍然使用 \(G(x)=\sum\limits_{i=0}^{+\infty} [3|i]\frac{x^i}{i!}\) 的 \(k\) 次方的系数来计算答案
这时候很悲惨,莫得 \(e^{x}+e^{-x}\) 了,但是出现了可以拿单位根反演化开的东西,继续推到不难得到:
(其实 \(-1=\omega_2^1\) )
把 \(\frac{1}3\) 提出来,把 \((\omega_3^j)^i\) 和外面合并之后仍然可以使用 \(e^{kx}\) 的式子简化 \(G(x)\) 的表达
这样子再进行 \(k\) 次方操作就会舒适许多,仍然是二项式定理配合组合意义展开
那么把 \(e\) 的次幂堆到一起展开(不放到一起就没法做了)得到
使用原根 \(g=7\) 的 \(\frac{mod-1}3\) 来表示单位根
\(\Theta(k^2)\) 的做法就足够了,代码实现是简单的