FFT/NTT 学习笔记】的更多相关文章

具体原理就不讲了qwq,毕竟证明我也不太懂 FFT(快速傅立叶变换)&NTT(快速数论变换) FFT //求多项式乘积 //要求多项式A和多项式B的积多项式C //具体操作就是 //DFT(A),DFT(B)->暴力乘积->拉格朗日插值(即IDFT(C))->C //其中DFT表示离散傅里叶变换 //通俗的来说就是用点值表示多项式 //使用神秘单位复数根将时间复杂度降至O(nlogn) //ps:但是常数巨大 //pps:应用非常广泛,非常多题目都要fft or ntt优化,板子…
0. 前置芝士 基础群论 复数 \(\mathbb C = \mathbb R[x^2+1]\) 则有 \(i^2+1=(-i)^2+1=0\),\(i \in \mathbb C - \mathbb R\) \(i^0=1;i^1=i;i^2=-1;i^3=-i;i^x=i^{x \bmod 4}(x \in \mathbb Z)\) 定理 0.1(欧拉公式) \(e^{ik} = \cos k + i \sin k\) 证明: (因为这里辛辛苦苦打出来的 \(\sf \LaTeX\) 炸了,…
FFT和NTT学习笔记 算法导论 参考(贺) http://picks.logdown.com/posts/177631-fast-fourier-transform https://blog.csdn.net/qq_38944163/article/details/81835205 https://www.cnblogs.com/RabbitHu/p/FFT.html [TOC] 概述 目的 以$O(nlg_n)$的时间复杂度计算多项式乘法 多项式的表达 系数表达: \(\{a_0, a_1,…
第三波,走起~~ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅰ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ 单位根反演 今天打多校时 1002 被卡科技了--赛场上看出来是个单位根反演但不会,所以只好现学这东西了( 首先你得知道单位根是什么东西,对于 \(n\) 次方程 \(x^n-1=0(x\in\mathbb{C})\),在复数域上有 \(n\) 个根,其对应到复平面上就是单位圆的 \(n\) 等分点,我们将这些单位根从 \(x\) 轴正半轴开始顺时针依次…
众所周知,tzc 在 2019 年(12 月 31 日)就第一次开始接触多项式相关算法,可到 2021 年(1 月 1 日)才开始写这篇 blog. 感觉自己开了个大坑( 多项式 多项式乘法 好吧这个应该是多项式各种运算中的基础了. 首先,在学习多项式乘法之前,你需要学会: 复数 我们定义虚数单位 \(i\) 为满足 \(x^2=-1\) 的 \(x\). 那么所有的复数都可以表示为 \(z=a+bi\) 的形式,其中 \(a,b\) 均为实数. 复数的加减直接对实部虚部相加减就行了. 复数的乘…
参考资料 picks miskcoo menci 胡小兔 unname 自为风月马前卒 上面是FFT的,学完了就来看NTT吧 原根 例题:luogu3803 fft优化后模板 #include <iostream> #include <cstdio> #include <cmath> using namespace std; int n, m, lim=1, rev[2100005]; const double PI=acos(-1.0); struct Complex…
因为垃圾电脑太卡了就重开了一个... 前传:多项式Ⅰ u1s1 我预感还会有Ⅲ 多项式基础操作: 例题: 26. CF438E The Child and Binary Tree 感觉这题作为第一题还蛮合适的( 首先我们设 \(f_i\) 为权值之和为 \(i\) 的符合要求的二叉树的个数. 显然可以枚举根节点的权值.左子树的权值之和进行转移. 也就是 \(f_i=\sum\limits_{x\in S}\sum\limits_{y=0}^{i-S}f_yf_{i-x-y}\) 如果我们记 \(…
目录 参考资料 FFT 吹水 例题 普通做法 更高大尚的做法 定义与一部分性质 系数表达式 点值表达式 点值相乘??? 卷积 复数 单位根 DFT IDFT 蝴蝶迭代优化 单位根求法 实现.细节与小优化 细节 小优化 实现 超~毒瘤优化. 实战! First Second 温馨插入:生成函数 Third 总所周知,FFT是一个非常麻烦的算法,再加上博主语文不好,便写起来有点麻烦,但会尽力去写.要以后自己看不懂就... 注:因为最近的压力紧张,便没有继续学习FFT,这仅为目前的半成品以及一些目前已…
和\(FFT\)相对应的,把单位根换成了原根,把共轭复数换成了原根的逆元,最后输出的时候记得乘以原\(N\)的逆元即可. #include <bits/stdc++.h> using namespace std; #define LL long long const int MAXN = 3 * 1e6 + 10, P = 998244353, G = 3; LL a[MAXN], b[MAXN]; int N, M, limit = 1, L, r[MAXN], Gi; inline LL…
引入 \(\tt NTT\) 和 \(\tt FFT\) 有什么不一样呢? 就是 \(\tt NTT\) 是可以用来取模的,而且没有复数带来的精度误差. 最最重要的是据说 \(\tt NTT\) 常数小的很,可以在这一方面吊打 \(\tt FFT\) . 至于对于不用取模的多项式乘法怎么做,可以给他附一个非常大的模数. 但是如果遇到有非整数的系数的多项式还是只能看 \(\tt FFT\) 了. 正文 \(\tt NTT\) 的前置知识比 \(\tt FFT\) 的要简单的多. 原根 对于 \(p…