单位根反演

单位根反演,其实就一个式子。

[n|a]=1nk=0n1wnak

证明在我的 FFT 博客里边。

正经做题的时候由于经常对大质数取模,所以单位根一般都是原根。

主要用于一类带着取模的东西,因为 [imodj=k] 就是 [j|ik]

#lojj6485 LJJ 学二项式定理

题意:求

i=0n(ni)siaimod4mod998244353

首先题面上给你摆着二项式定理了而且这玩意长得就很像二项式定理。那么我们尝试拆一下凑出来个二项式定理。

i=0n(ni)siaimod4=i=0n(ni)sij=03aj[imod4=j]=i=0n(ni)sij=03aj[4|ij]=i=0n(ni)sij=03aj14k=03w4k(ij)=14j=03ajk=03w4kji=0n(ni)siw4ki=14j=03ajk=03w4kj(sw4k+1)n

完事。w41 就是 g(mod1)4

要不然以后这种数学专题能不放代码就不放了吧。(主要是懒得写了)

bzoj3328 PYXFIB

题意:求

i=0nk(nik)Fikmodp

其中 Fik 为斐波那契数列第 ik 项,k|p1

看到这个仍然套路单位根反演:

i=0nk(nik)Fik=i=0n(ni)Fi[k|i]=i=0n(ni)Fi1kj=0k1wkij=1kj=0k1i=0n(ni)Fiwkij

想办法给后边凑出来一个幂。事实上我们有结论:对于矩阵 A,B,满足

i=0n(ni)AiBni=(A+B)n

也就是矩阵意义下的二项式定理。那么后边的东西的转移矩阵就是 (wkjA+I)n 了。

P5591 小猪佩奇学数学

题意:求

i=0n(ni)piikmod998244353

首先你得知道这是个单位根反演。然后得搞出来一个 mod

i=0n(ni)piik=i=0n(ni)piiimodkk=1k(i=0n(ni)piii=0n(ni)pi(imodk))

分别看前面后面。

前面:

i=0n(ni)pii

这个 i 在外边很烦人,把他扔到组合数里边去。

=ni=0n(n1i1)pi=ni=0n1(n1i)pi=np(p+1)n1

后面:

i=0n(ni)pi(imodk)=i=0n(ni)pij=0k1j[imodk=j]=i=0n(ni)pij=0k1j1kd=0k1wkd(ij)=1kj=0k1jd=0k1wkdji=0n(ni)piwkdi=1kd=0k1(pwkd+1)nj=0k1jwkdj

后边这一团东西其实就是个等差乘等比。
S(n,k)=i=0n1iki ,则

kS(n,k)S(n,k)=i=0n1iki+1i=0n1iki=i=1n(i1)kii=0n1iki=i=0n1ki+1+(n1)kn=1knk1+1+(n1)kn

那么由于 k=wkdj,则 kn=1 。代入得:

(k1)S(n,k)=nS(n,k)=nk1

这是 k1 的情况。k=1 的更简单,直接就是 n(n+1)2。完事。

P5548 [BJ United Round #3] 押韵

uoj#450. 【集训队作业2018】复读机 的加强版。

首先列出一种的生成函数:

d|ixii!

单位根反演化一下:

1di=0xii!k=0d1wdik=1dk=0d1ewdk

所以最后就是要求

[xn](1dk=0d1ewdk)k

开始分讨。

d=1

显然是 kn

d=2

原式变为

[xn](ex+ex2)k=12k[xn](ex+ex)k=12k[xn]i=0k(ki)eixex(ni)=12ki=0k(ki)(2ik)n

d=3

原式变为

[xn](ex+ew3+ew323)k=13k[xn]i=0k(ki)j=0i(ij)eixejw3xe(kij)w32x=13ki=0k(ki)j=0i(ij)(i+jw3+(kij)w32)n

d=4

上边两层求和已经 O(k2logn) 了,现在如果再往下拆的话 2000 的范围铁 T。得采取一些人类智慧。

回到原来的式子:

[xn](1dk=0d1ewdk)k

最后其实也就是一堆 ea+bi 加起来。那么就相当于每次选 (1,0),(0,1),(1,0),(0,1) 四个向量中的一个走,走 k 步到达 (a,b) 的方案数,套路转坐标轴然后组合数算即可。

d=6

最为人类智慧的一部分。我们发现(鬼知道怎么发现的) w6 满足 w1=w2 ,所以所有的根都可以赋为一个横坐标单位长度 1 ,纵坐标单位长度 w 的坐标,分别为 (1,0),(0,1),(1,1),(1,0),(0,1),(1,1)

这个不好组合意义,考虑操作一下生成函数。先所有坐标 +1 去掉负数,然后列出二元生成函数

F(x,y)=x2y+xy2+y2+y+x+x2

那么我们就要求 G(x,y)=F(x,y)k 的所有系数。套路对 x 求偏导然后表示自己(好麻烦):

G(x,y)=kF(x,y)k1F(x,y)F(x,y)G(x,y)=kG(x,y)F(x,y)F(x,y)=2xy+2x+y2+1

现在只有 GG 两个未知数了,可以递推系数。大概长这样:

n[xnym]+(n1)[xn1ym]+(n1)[xn1ym1]+n[xnym2]+(n+1)[xn+1ym2]+(n+1)[xn+1ym1]

=k[xnym]+2k[xn1ym1]+2k[xn1ym]+k[xnym2]

没了。白兔之舞到时候再说。

posted @   gtm1514  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示