【学习笔记】超简单的快速数论变换(NTT)(FFT的优化)(含全套证明)

本文介绍了快速数论变换(NTT)的基础知识,包括NTT与FFT的关系、原根的性质及其在NTT中的作用。通过证明,展示了原根为何能替代单位根用于模p意义下的变换。同时,提供了NTT的模板和实现,指出NTT在效率上优于FFT。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整理的算法模板合集: ACM模板


点我看多项式全家桶(●^ ◡ _◡ ^●)

一、前置知识

  • 快速傅里叶变换FTT(学完FFT再看NTT哈,)

  • 原根(链接待更,下面有原根的基础说明,足够今天的NTT使用了)

二、快速数论变换(NTT)

在这里插入图片描述

三、NTT证明(和FFT的关系)

我们发现FFT里的大多操作,都跟单位根没有什么关系,(例如选点插值,奇偶分治),我们随便选择一个n个点 v , v 2 , v 3 , … , v N v,v^2,v^3,\dots,v^N v,v2,v3,,vN,最后可以得到公式 A ( k ) = A 1 ( x ) + V k × A 2 ( k ) A(k) = A1(x) + V^k \times A2(k) A(k)=A1(x)+Vk×A2(k),现在问题是这个公式只有在 k < N 2 k<\frac{N}{2} k<2N的时候才能成立,我们需要找到 k ≥ N 2 k≥\frac{N}{2} k2N 的时候的答案,这样才能得到整体的答案。所以FFT的关键问题就是如何得到 k ≥ N 2 k≥\frac{N}{2} k2N 时的统一的递推式,进而可以把两个子问题合并,使用分治的思想 O ( n l o g n ) O(nlogn) O(nlogn)的时间完成整个过程。

我们之所以使用单位根,即令 v = ω N v = \omega_N v=ωN,也就是 e 2 i π N e^\frac{2i\pi}{N} eN2iπ,就是 因为单位根拥有四个重要性质:

  • ω N N = 0 \omega_N^N = 0 ωNN=0
  • ω N N 2 = − 1 \omega_N^\frac{N}{2} = -1 ωN2N=1
  • ω 2 N 2 k = ω N k \omega_{2N}^{2k} = \omega_{N}^k ω2N2k=ωNk(折半定理)
  • ω N k + N 2 = − ω N k \omega_N^{k + \frac{N}{2}} = -\omega_{N}^{k} ωNk+2N=ωNk(消去定理)

我们根据性质1和3,可以得到 k < N 2 k<\frac{N}{2} k<2N的时候, A 1 ( ω N k ) = A 1 ( ω N 2 k ) + ω N k × A 2 ( ω N 2 k ) A1( \omega_{N}^k) =A1( \omega_{\frac{N}{2}}^k)+ \omega_{N}^k\times A2( \omega_{\frac{N}{2}}^k) A1(ωNk)=A1(ω2Nk

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁凡さん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值