单位根 ωk1 的含义就是对 −1 开 k 次根号,ωkd 就是 (ωk1)d。具体的看 FFT 的内容。
对于单位根反演,有一个等式:
[k∣d]=k1i=0∑k−1ωkdi
考虑证明。
- d=0modk
用等比数列求和,可以化为 k1ωkd−1ωkkd−1。
由于 ωkk=1,且 wkd=1,则原式值为 0。
由于此时和式内每一个数都是 1,则原式值为 1。
然后可以推到下面这个公式
[a=bmodn]=[a−b=0modn]=[n∣a−b]=n1d=0∑n−1ωnadωn−bd
给定 n,p,k,求
i=0∑n(in)×pi×⌊ki⌋mod998244353
其中,1≤n,p≤998244353,k∈{2w∣0≤w≤20}。
推柿子。
i=0∑n(in)pi⌊ki⌋=(i=0∑n(in)pij=0∑ik1d=0∑k−1ωkdj)−(1+p)n=k1d=0∑k−1i=0∑n(in)pij=0∑iωkdj−(1+p)n=k1d=0∑k−1i=0∑n(in)piωkd−1ωkd(i+1)−1−(1+p)n=k1d=0∑k−1ωkd−1i=0∑n(in)pi(ωkd(i+1)−1)−(1+p)n=k1d=0∑k−1ωkd−1ωkd(1+pωkd)n−(1+p)n−(1+p)n
根据单位根的定义,ωk1=gkmod−1,g 是模数的原根,取 3。
还有一个细节,就是你在等比数列求和时,当 d=0,则底下的 ωkd−1=0,显然是错的,故应该要特判掉 d=0 的情况。
i=0∑n(in)pij=0∑iωkdj=i=0∑n(in)pi(i+1)=i=0∑n(in)ipi+(1+p)n=i=0∑n(i−1n−1)pi−1×np+(1+p)n=np×(1+p)n−1+(1+p)n
代码。