「学习笔记」单位根反演

单位根反演

[n|k]1ni=0n1ωnik

(千万记得乘 1n

如果 [n|k] 那么都是 1

反之则用等比数列得到 1nωnnk1ωnk1=0

用处是求某个多项式的特定倍数的系数和,也就是:

i=0nk[xik]f(x)=1kj=0k1f(ωkj)

把枚举上界换掉,大力展开之后就行了

应用

bzoj3328 PYXFIB

i=0nk(nik)Fik%mod

满足 mod1modkFik 为斐波那契数列第 ik

  • 关键结论:i=0n(ni)Ai=(A+I)nI 是单位矩阵

    其实也就是矩阵意义下的二项式定理,因为矩阵乘法和加法可以合并进行

那么把原始展开得到的式子合并完了如下:

i=0n[k|i](ni)fi=i=0n(ni)fi1kj=0k1ωkji=1kj=0k1i=0n(ni)fi(ωkj)i

后面的部分把 ωkj 和矩阵做数乘就行了

复杂度 Θ(Tk+8klogn)

需要预处理原根

Loj 6485 LJJ学二项式定理

把几个独立下来之后,考虑 a0 的部分,则有

i=0n(ni)[4|i]sia0

那么换掉式子就是

14i=0nj=03(ni)siwji

二项式定理合并即可,对于剩下的几个,被模数就是 i+k 其实照样推就行了

代码很好写

UOJ450 复读机

本题也是在某种意义上 EGF 第一题

  • Subtask 1:d=1

直接输出 kn 即可


以下两个部分均需注意,EGF 的卷积最后乘 n! 才是正确答案

  • Subtask 2:d=2

把脑残式子一写:诶这怎么是 EGF 卷起来的形式呀?

G(x)=i=0+[2|i]xii!

答案即 Gk(x)[xn]

问题似乎陷入了死节,但是使用 ex=i=0+xii! 变换一下:

ansn!=[xn]Gk(x)=[xn](ex+ex2)k

使用 ekx=i=0+(kx)ii! 大力展开所有的取出 xn 的系数,得到:

ansn!=12ki=0k(ki)(2ik)nn!

使用 O(k) 的算法可以快速解决这个问题

  • Subtask 3:d=3,k1000

仍然使用 G(x)=i=0+[3|i]xii!k 次方的系数来计算答案

这时候很悲惨,莫得 ex+ex 了,但是出现了可以拿单位根反演化开的东西,继续推到不难得到:

G(x)=i=0+xii!13j=02ω3ij

(其实 1=ω21

13 提出来,把 (ω3j)i 和外面合并之后仍然可以使用 ekx 的式子简化 G(x) 的表达

G(x)=13i=0+(ω30x)i+(ω31x)i+(ω32x)ii!=13(eω30+ω31+ω32)

这样子再进行 k 次方操作就会舒适许多,仍然是二项式定理配合组合意义展开

Gk(x)=i=0k(ki)(eω30)kij=0i(ij)(eω31)j(eω32)ij

那么把 e 的次幂堆到一起展开(不放到一起就没法做了)得到

ansn!=1n!3ki=0kj=0i(ki)(ij)(ki+ω32(ij)+ω31j)n

使用原根 g=7mod13 来表示单位根

Θ(k2) 的做法就足够了,代码实现是简单的

posted @   没学完四大礼包不改名  阅读(176)  评论(3编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示