NTT从入门到精通

本片博客中有很多前置知识,请一定要保证自己看懂,这样后面的学习会非常的轻松!!!

剩余系

剩余系指对于某一个特定的正整数 n n ,一个整数集中的数模n所得的余数域
如果一个剩余系中包含了这个正整数所有可能的余数,那么称之为模 n n 完全剩余系

简化剩余系n的完全剩余系中与 n n 互素的数构成的子集


群的阶数定义为集合G元素的个数,记作 |G| | G |

如果 G G 只有有限个元素,称G为有限群

群的运算一般不可交换

满足交换律的群称为阿贝尔群(Abelian group)


n n 的简化剩余系Zn关于乘法构成的代数系统是群

封闭性: gcd(ab,n)=gcd(abmodn,n)=1 g c d ( a b , n ) = g c d ( a b mod n , n ) = 1

结合律:乘法满足结合律

单位元: e=1 e = 1

逆元素: ax1(modn) a x ≡ 1 ( mod n ) Zn Z n ∗ 中有唯一解


子群

G G 是群,S G G 的一个子集,如果S仍然是群,或等价的满足
封闭性: a,bS,abS ∀ a , b ∈ S , a ∗ b ∈ S
结合律:显然满足结合律
单位元:设 G G 的单位元为e,有 eS e ∈ S
逆元素: aS ∀ a ∈ S ,其在 G G 中有逆元a1 a1S a − 1 ∈ S
则称 S S G的一个子群
e e G G G的平凡子群

陪集

H H G的子群, aG a ∈ G ,定义

aH=ah|hH a H = a h | h ∈ H

aH a H H H 的一个左陪集


aH={ah,|hH}

显然的陪集中的元素与子集中的元素满足双射关系

f(x)=ax,f(x)1=a1x f ( x ) = a x , f ( x ) − 1 = a − 1 x


加上自己的一点理解?

aG,a1G,x1H,x2H a ∈ G , a − 1 ∈ G , x 1 ∈ H , x 2 ∈ H

ax1b(modn),ax2b(modn) a ∗ x 1 ≡ b ( mod n ) , a ∗ x 2 ≡ b ( mod n )

bG,ba1=x1=x2 b ∈ G , b ∗ a − 1 = x 1 = x 2

所以子集中的元素乘 a a 后并不会映射到同一个元素上

同理, 陪集中的元素不会映射到同一个元素上

所以满足双射关系(自己理解和上面式子无关)


|aH|=|H|

aH a ∈ H ,则 aH=H a H = H


(aH=bH)(aHbH=) ( a H = b H ) ∨ ( a H ∩ b H = ∅ )

aH a H bH b H 不可能既不等价,又有交集

证明:

若使得 aHbH a H ∩ b H ≠ ∅

必然有 ah1=bh2 a h 1 = b h 2

a=h2h11b a = h 2 ∗ h 1 − 1 ∗ b

aH=bHh2h11=bH a H = b H ∗ h 2 ∗ h 1 − 1 = b H


gG,ggH ∀ g ∈ G , g ∈ g H

GaGaH G ⊆ ⋃ a ∈ G a H

显然的 aGaHG ⋃ a ∈ G a H ⊆ G

所以

aGaH=G ⋃ a ∈ G a H = G

即对于同一子集所形成的所有陪集的并等价于全集


陪集划分定理

假设有 a1,a2,,akG a 1 , a 2 , ⋯ , a k ∈ G

G=ki=1aiH G = ⋃ i = 1 k a i H

其中 aiHajH=(ij) a i H ∩ a j H = ∅ ( i ≠ j )


拉格朗日定理

根据陪集划分定理我们可以得到 k|aiH|=|G| k ∗ | a i H | = | G |

k|H|=|G|,|H||G| k ∗ | H | = | G | , | H | ∣ | G |


元素的幂

考虑有限群 G,aG G , a ∈ G

元素的幂表示为 ak=eki=1a,ak=eki=1a1 a k = e ∏ i = 1 k a , a − k = e ∏ i = 1 k a − 1

使得 ak=e a k = e 的最小正整数 d d 称为a的阶,记作 ord(a) o r d ( a )

因为是个有限群,那么一定存在 ord(a) o r d ( a )


考虑由 a a 的幂生成的集合S={ak|kZ}

显然 S S G的子群

|S|=ord(a)ord(a)|G| | S | = o r d ( a ) ⇒ o r d ( a ) ∣ | G |

所以 a|G|=apord(a)=(aord(a))p=ep=e a | G | = a p o r d ( a ) = ( a o r d ( a ) ) p = e p = e

|Zn|=φ(n) | Z n ∗ | = φ ( n )

aZn ∀ a ∈ Z n ∗ ,(即 gcd(a,n)=1 g c d ( a , n ) = 1 ),有

aφ(n)=1(modn) a φ ( n ) = 1 ( mod n )


原根

对于群 G G ,若gG,使得 ord(g)=|G| o r d ( g ) = | G | ,称 g g G的原根

G G 中每一个元素都是g的幂次

因为 gk g k 在模 n n 意义下有|G|种取值

对应了 G G 中的|G|个元素


Zn Z n ∗ 存在原根 n=2,4,pa,2pa ⇔ n = 2 , 4 , p a , 2 p a ,其中 p p 为奇素数

如果存在原根,原根的数目为φ(φ(n))


考虑这样的素数 p=c2l+1 p = c ∗ 2 l + 1

运算都在 Zp Z p ∗ 中进行

对于 n=2k(kl) n = 2 k ( k ≤ l ) ,令

gn=gp1n g n = g p − 1 n

因为 p p 为素数,所以φ(p)=p1,所以

gnn=gp1=1 g n n = g p − 1 = 1


消去引理: gdkdn=(gp1dn)dk=(gp1n)k=gkn g d n d k = ( g p − 1 d n ) d k = ( g p − 1 n ) k = g n k

折半引理: (gkn)2=(gk+n2n)2=g(p1)kn ( g n k ) 2 = ( g n k + n 2 ) 2 = g ( p − 1 ) k n

求和引理: n1i=0(gkn)i={n,nk0,nk ∑ i = 0 n − 1 ( g n k ) i = { n , n ∣ k 0 , n ∤ k

nk n ∣ k 时, gkn=(gp1n)qn=(gp1)=1 g n k = ( g p − 1 n ) q n = ( g p − 1 ) = 1

nk n ∤ k 时, gkn1,n1i=0(gkn)i=1gknn1gkn=0 g n k ≠ 1 , ∑ i = 0 n − 1 ( g n k ) i = 1 − g n k n 1 − g n k = 0

可由等比数列递推公式得到


快速数论变换(NTT)

gn=gp1n g n = g p − 1 n

wn=e2πin w n = e 2 π i n

wngn w n ⇔ g n

DFT D F T 修改为求 g0n,g1n,g2n,,gn1n g n 0 , g n 1 , g n 2 , ⋯ , g n n − 1 处的点值

IDFT I D F T 修改为求 g0n,g1n,g2n,,g(n1)n g n 0 , g n − 1 , g n − 2 , ⋯ , g n − ( n − 1 ) 处的点值


求原根

g g Zp的原根 ord(g)=p1 ⇔ o r d ( g ) = p − 1

ord(g)(p1) o r d ( g ) ∣ ( p − 1 )

p1 p − 1 不同质因子为 p1,p2,,ps p 1 , p 2 , ⋯ , p s

g g 为原根gp1pi1,(i=1,2,,s)


NTT中模数的选取

c=ab c = a ⊗ b

ci=j=0aijbj(modp) c i = ∑ j = 0 a i − j b j ( mod p )

如果 ci<p c i < p ,显然结果是精确的

对于 p=c×2k+1 p = c × 2 k + 1 ,必须满足 n2k n ≤ 2 k

例: p=119223+1=998244353,g=3 p = 119 ∗ 2 23 + 1 = 998244353 , g = 3


NTT题目

BZOJ 4555 求和


任意模数NTT(三模数NTT)

考虑长度为 n n 105数量级)的向量在模 P P 109数量级,可能非质数)意义下的卷积,即

ci=j=0iaijbjmodP c i = ∑ j = 0 i a i − j b j mod P

NTT的模数需要满足条件 P=c2k+1 P = c ∗ 2 k + 1 ,为质数

由于 P P 甚至不是质数,难以直接NTT,尝试直接计算出最终结果

nP2的数量级为 1023>264 10 23 > 2 64

那么我们取 int i n t 范围内较大的三个不同的满足NTT条件的质数 p1,p2,p3 p 1 , p 2 , p 3 ,使得 p1p2p3>nP2 p 1 p 2 p 3 > n P 2 ,并分别在模 pi p i 意义下进行卷积。设真实值为 s s ,可以得到:

ss1(modp1)

ss2(modp2) s ≡ s 2 ( mod p 2 )

ss3(modp3) s ≡ s 3 ( mod p 3 )

前两项可以直接在 longlong l o n g l o n g 范围内用CRT合并

ss0(modp1p2) s ≡ s 0 ( mod p 1 p 2 )

s=s0+kp1p2=s3+lp3 s = s 0 + k p 1 p 2 = s 3 + l p 3

注意到 k<p3 k < p 3 ,将上式放至模 p3 p 3 意义下,有

k(s3s0)(p1p2)1(modp3) k ≡ ( s 3 − s 0 ) ( p 1 p 2 ) − 1 ( mod p 3 )

p3 p 3 意义下所得即为 k k 的真实值,随后在模P意义下回代得到 smodp s mod p 的值

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值