单位根反演

引子

假设现在我们要求一个式子

ni=0(n2i)

不妨构造二项式

(1+x)n=ni=0(ni)xi

我们现在将x=1,x=1 带入,则有

2n=ni=0(ni)0=ni=0(1)i(ni)

两式相加,则有

2n=2n2i=0(n2i)

问题已经解决,Ans=22n1

那如果我们现在想计算

ni=0(nki)

该怎么办?

简介

单位根反演就是做以上工作的东西。

简而言之,如果能快速求出某个多项式的点值,那我们就可能能求出x的特定倍数幂的系数和。

形式化的,我们可以求

nki=0[xik]f(x)

知识储备

单位根

根据FFT的前置知识,我们可以知道,对于一个n,若有xn1=0,则称xn次单位根,记为ωn

单位根在复平面上的分布将单位圆均分为n份,在第一象限的最靠近实轴的单位根记为$\omega n^1\omega {n}\omega _ n^{2 \cdots n-1}$

所以我们不难发现如下几个性质:

  1. $ \omega n^i +\omega n^{i+n/2} (2|n)$

  2. $\omega n^i=\omega n^{i \% n}$

  3. $\omega {kn}^{ki}=\omega {n}^{i}$

由于性质3的存在,我们可以定义本原单位根。

本原单位根的定义是:若ω,n满足ωn1=0,且n是最小满足条件的,则称ωn的本原单位根。

我们不难发现,对于单位根$\omega {n}^{i}\gcd(n,i)==1\omega n^i$一定是n的本原单位根。

否则,设d=gcd(i,n),则$\omega {n}^{i}=\omega {n’d}^{i’d}=\omega {n’}^{i’}(\omega {n’}^{i’})^{n’}-1=0n$的本原单位根。

性质:

k,[nk]=1nn1i=0ωikn

证明:

nk,则有

Ans=1nn1i=0ωinkn=1nn1i=01=1

否则,这玩意是个等比数列求和,根据高中知识,我们有

Ans=1nω0nωnkn1ωkn=0

得证。

应用

现在我们考虑一开始提出的那个问题,求

ni=0(nki)

这个就相当于在求(设N=nk)

f(x)=Ni=0(Ni)xi

的次数为k的倍数的项的系数和。

我们不妨设

f(x)=Ni=0aixi<

那我们只需要求

Ans=Ni=0([xi]f(x))[ki]=Ni=0([xi]f(x))1kk1j=0ωijk=Ni=0([xi]f(x))1kk1j=0(ωjk)i=Ni=0aik1j=0(ωjk)i=k1j=0Ni=0(ωjk)i=1kk1j=0f(ωjk)

即可。

同时注意到

f(x)=(x+1)n

例题

[LOJ 6485] LJJ 学二项式定理

Link

题意

给定$n,s,a 0,a 1,a 2,a 3$,求

[ni=0((ni)siaimod4)]mod998244353

题解

我们不妨不关注a数组部分,先构造二项式

f(x)=ni=0(ni)sixi1ni=(sx+1)n

现在只要分别求出f(x)403的系数之和即可,直接套用之前所讲的方法即可。

需要注意,在模P意义下,设gP的原根,则ω1n=gP1n

第二种构造方法:

f(x)=ni=0(nni)snixif(x)=(s+x)n

注意,这里使用了ni替换了i,所以要处理一下a数组的下标。

Powered By Valine
v1.5.2