引子
假设现在我们要求一个式子
n∑i=0(n2i)不妨构造二项式
(1+x)n=n∑i=0(ni)xi我们现在将x=1,x=−1 带入,则有
2n=n∑i=0(ni)0=n∑i=0(−1)i(ni)两式相加,则有
2n=2∗⌊n2⌋∑i=0(n2i)问题已经解决,Ans=22∗n−1。
那如果我们现在想计算
n∑i=0(nki)该怎么办?
简介
单位根反演就是做以上工作的东西。
简而言之,如果能快速求出某个多项式的点值,那我们就可能能求出x的特定倍数幂的系数和。
形式化的,我们可以求
⌊nk⌋∑i=0[xik]f(x)知识储备
单位根
根据FFT的前置知识,我们可以知道,对于一个n,若有xn−1=0,则称x是n次单位根,记为ωn。
单位根在复平面上的分布将单位圆均分为n份,在第一象限的最靠近实轴的单位根记为$\omega n^1,一般也可记为\omega {n}。其余的按逆时针排序,分别为\omega _ n^{2 \cdots n-1}$
所以我们不难发现如下几个性质:
$ \omega n^i +\omega n^{i+n/2} (2|n)$
$\omega n^i=\omega n^{i \% n}$
$\omega {kn}^{ki}=\omega {n}^{i}$
由于性质3的存在,我们可以定义本原单位根。
本原单位根的定义是:若ω,n满足ωn−1=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=0。并不是n$的本原单位根。
性质:
∀k,[n∣k]=1nn−1∑i=0ωikn证明:
若n∣k,则有
Ans=1nn−1∑i=0ωink′n=1nn−1∑i=01=1否则,这玩意是个等比数列求和,根据高中知识,我们有
Ans=1nω0n−ωnkn1−ωkn=0得证。
应用
现在我们考虑一开始提出的那个问题,求
n∑i=0(nki)这个就相当于在求(设N=nk)
f(x)=N∑i=0(Ni)xi的次数为k的倍数的项的系数和。
我们不妨设
f(x)=N∑i=0aixi<那我们只需要求
Ans=N∑i=0([xi]f(x))[k∣i]=N∑i=0([xi]f(x))1kk−1∑j=0ωijk=N∑i=0([xi]f(x))1kk−1∑j=0(ωjk)i=N∑i=0aik−1∑j=0(ωjk)i=k−1∑j=0N∑i=0(ωjk)i=1kk−1∑j=0f(ωjk)即可。
同时注意到
f(x)=(x+1)n例题
[LOJ 6485] LJJ 学二项式定理
题意
给定$n,s,a 0,a 1,a 2,a 3$,求
[n∑i=0((ni)siaimod4)]mod998244353题解
我们不妨不关注a数组部分,先构造二项式
f(x)=n∑i=0(ni)sixi∗1n−i=(sx+1)n现在只要分别求出f(x)除4余0⋯3的系数之和即可,直接套用之前所讲的方法即可。
需要注意,在模P意义下,设g为P的原根,则ω1n=gP−1n。
第二种构造方法:
f(x)=n∑i=0(nn−i)sn−ixif(x)=(s+x)n注意,这里使用了n−i替换了i,所以要处理一下a数组的下标。
v1.5.2