单位根反演
(千万记得成 (frac{1}n))
如果 ([n|k]) 那么除了 (i=0) 是 (1) 外都是 (0)
反之则用等比数列得到 (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}inom ni A^i=(A+I)^n),(I) 是单位矩阵
其实也就是矩阵意义下的二项式定理,因为矩阵乘法和加法可以合并进行
那么把原始展开得到的式子合并完了如下:
后面的部分把 (omega_{k}^j) 和矩阵做数乘就行了
复杂度 (Theta(Tk+8klog n))
需要预处理原根
Loj 6485 LJJ学二项式定理
把几个独立下来之后,考虑 (a_0) 的部分,则有
那么换掉式子就是
二项式定理合并即可,对于剩下的几个,被模数就是 (i+k) 其实照样推就行了
代码很好写
UOJ450 复读机
本题也是在某种意义上 (EGF) 第一题
- ( m{Subtask 1}:d=1)
直接输出 (k^n) 即可
以下两个部分均需注意,( m{EGF}) 的卷积最后乘 (n!) 才是正确答案
- ( m{Subtask 2}:d=2)
把脑残式子一写:诶这怎么是 (EGF) 卷起来的形式呀?
答案即 (G^k(x)[x^n])
问题似乎陷入了死节,但是使用 (e^x=sumlimits_{i=0}^{+infty} frac{x^i}{i!}) 变换一下:
使用 (e^{kx}=sumlimits_{i=0}^{+infty} frac{(kx)^i}{i!}) 大力展开所有的取出 (x^n) 的系数,得到:
使用 (O(k)) 的算法可以快速解决这个问题
- ( m{Subtask 3}:d=3,kle 1000)
仍然使用 (G(x)=sumlimits_{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)) 的做法就足够了,代码实现是简单的