浅谈单位根反演

我感觉这东西还蛮有意思的。

基础结论

我们首先给出一个结论:i=0n1ωnij=n[n|j],其中 ωn 表示 n 次单位根,具体的,它等于 e2iπn

下面给出证明:

f(x)=i=0n1xi,上式就等价于 f(ωnj)=[n|j]

  • ωni=1,即 n|j 时,原式 =i=0n11=n
  • ωni1,即 nj 时,f(x)=xn1x1,有因为 (ωni)n=1,所以原式 =0

这个式子的一般情况只能处理 jmodn=0 的情况,考虑拓展成 jmodn=a 的情况。

n[jmodn=a]=n[(ja)modn=0]=i=0n1ωni(ja)=i=0n1ωnijωnia

这样我们就可以得到拓展,记多项式 F(x)=i=0maixi

i=0mai[imodn=k]=1ni=0maij=0n1ωnijωnjk=1nj=0n1ωnjki=0maiωnij=1nj=0n1ωnjkF(ωnj)

这样,我们就得到了快速求出 F(x) 所有满足 imodn=kai 的系数和。

CTT 2019 D2T1 循环序列

可以将题意转化为 ans=i=0(kni+x)modp,保证 n|p1

不难得到:ans=[tx][(1+t)kmodtn]。记 f(t)=(1+t)k,所以最终答案为 i=0n1ωnixf(ωni)

复杂度为 O(nlogn)

快速求值

有的时候暴力数其实并不够,有时候我们需要更快速的求值方式。

IDFT

学过 FFT 和 NTT 的式子,可以发现 IDFT 有着和单位根一致的结构,其实 IDFT 就是使用单位根反演来证明正确性的。

fi=j=0n1Fjωij,所以我们可以使用 IDFT 的过程来做到 O(nlogn) 求解,复杂度 O(nlogn),但仅限于 n=2w 的情况。

而对于 n2w 的情况,我们就需要考虑其他的求解方式了。

Chirp Z-Transform

我们记 F(x)=i=0n1Fixi,则我们最终要求的就是 F(x)n 个点值:F(ωni),i=0,1n1

而这个过程,就是 Chirp Z-Transform 所求解的形式。

针对单位根繁衍的情况,我们可以可以得到:

fi=j=0n1Fjωij=fi=j=0n1Fjω(i2)+(j2)(i+j2)

所以 fi=ωn(i2)j=0n1Fjωn(j2)×ωn(i+j2),这个是差卷积的形式,直接卷积即可,复杂度 O(nlogn)

例题

Luogu P5591 小猪佩奇学数学

给定 n,p,k,求 i=0n(ni)piikmod998244353,保证 wN[0,20],k=2w

先推式子:

i=0n(ni)piik=i=0n(ni)pii(imodk)k=i=0n(ni)piii=0n(ni)piimodkk=i=0n(ni)piij=0k1ji=0n(ni)pi[imodk=j]

先考虑前者,我们知道 (1+x)n=i=0n(ni)xi,而 [(1+x)n]=i=0n(ni)(xi),即 n(1+x)n1=i=0n(ni)ixi1

所以 i=0n(ni)pii=np(1+p)n1

再考虑后者,很明显是单位根反演的形式,记 f(x)=(1+px)n,则可知 i=0n(ni)pi[imodk=j]=1ki=0k1f(ωki),由于 k=2w,可以直接使用 IDFT 的过程。

复杂度 O(k(logk+logn))

[HNOI2019] 白兔之舞

首先考虑使用占位符 x 表示长度,记 Fi,j(x) 表示走到 (i,j) 的方案数的生成函数,Si,j(x) 表示对于 Fi,j(x) i 维的前缀和。
SL,y(x)=i=1Laixi,则我们最终需要的就是 i=1Lai[imodk=j],j=0,1k1

也就是要求解 i=0k1SL,y(ωki)ωkij,j=0,1k1

首先考虑如何求出 SL,y(ωki),i=0,1k1

我们知道 Fi,j(x)=k=1nvk,jxSi1,k(x)Si,j=Si1,j+Fi,j=Si1,j+k=1nvk,jxSi1,k(x)
初始状态为 S0,i(x)=[i=x]
由此,Si,j=Si1,j+Fi,j=Si1,j+k=1nvk,jxSi1,k(x),是可以使用矩阵快速幂的。

然后使用 Chirp Z-Transform 求解后半部分即可,由于是给定模数,所以要使用 MTT。

通过代码

posted @   Xun_Xiaoyao  阅读(427)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
/* 鼠标点击求赞文字特效 */
点击右上角即可分享
微信分享提示