FFT/NTT中档题总结】的更多相关文章

被DeepinC%怕了,把一些题放到这里来 T1Normal 其实这道题放到中档题也不太合适,个人感觉真的很难,机房里好像都是颓的题解 因为期望的可加性,把每个点的贡献单独处理,即求期望深度 考虑$y$对$x$的贡献:当且仅当$x->y$的路径上第一个点就选$y$,$y$才能成为$x$的祖先 所以$y$对$x$的贡献就是:$P=\frac{1}{dis(x,y)+1}$,$E=1$ 所以最终答案就是$\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}\frac{…
在学各种数各种反演之前把以前做的$FFT$/$NTT$的题整理一遍 还请数论$dalao$口下留情 T1快速傅立叶之二 题目中要求求出 $c_k=\sum\limits_{i=k}^{n-1}a_i*b_{i-k}$ 首先可以把$a$翻转, $c_k=\sum\limits_{i=k}^{n-1}a_{n-1-i}*b_{i-k}$ $c_k=\sum\limits_{i=0}^{n-k-1}a_{n-k-1-i}*b_{i}$ T2力 $f[i]=\sum_{j=1}^{i-1}\frac{q…
打算写一个多项式总结. 虽然自己菜得太真实了. 好像四级标题太小了,下次写博客的时候再考虑一下. 模板 \(FFT\)模板 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cctype> #include <algorithm> #define rin(i,a,b)…
前言.FFT  NTT 算法 网上有很多,这里不再赘述. 模板见我的代码库: FFT:戳我 NTT:戳我 正经向:FFT题目解题思路 \(FFT\)这个玩意不可能直接裸考的..... 其实一般\(FFT\)的题目难点不在于\(FFT\),而在于构造多项式与卷积. 两个经典例题: [ZJOI2014]力 给定序列\(\{ q[1],q[2],....q[n]\}\) 定义:\(Ej = \sum_{i<j} \frac{q[i]}{(i-j)^2} - \sum_{i>j} \frac{q[i]…
目录 信号, 集合, 多项式, 以及卷积性变换 卷积 卷积性变换 傅里叶变换与信号 引入: 信号分析 变换的基础: 复数 傅里叶变换 离散傅里叶变换 FFT 与多项式 \(n\) 次单位复根 消去引理, 折半引理与求和引理 重新定义 多项式的表示 快速傅里叶变换FFT 通过 FFT 在单位复数根处插值 FFT的速度优化与迭代实现 炸精现场与 NTT 原根 NTT 任意模数 NTT 卷积状物体与分治 FFT FWT 与位运算卷积 FWT 与 \(\text{or}\) 卷积 FWT 与 \(\te…
众所周知,tzc 在 2019 年(12 月 31 日)就第一次开始接触多项式相关算法,可到 2021 年(1 月 1 日)才开始写这篇 blog. 感觉自己开了个大坑( 多项式 多项式乘法 好吧这个应该是多项式各种运算中的基础了. 首先,在学习多项式乘法之前,你需要学会: 复数 我们定义虚数单位 \(i\) 为满足 \(x^2=-1\) 的 \(x\). 那么所有的复数都可以表示为 \(z=a+bi\) 的形式,其中 \(a,b\) 均为实数. 复数的加减直接对实部虚部相加减就行了. 复数的乘…
第三波,走起~~ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅰ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ 单位根反演 今天打多校时 1002 被卡科技了--赛场上看出来是个单位根反演但不会,所以只好现学这东西了( 首先你得知道单位根是什么东西,对于 \(n\) 次方程 \(x^n-1=0(x\in\mathbb{C})\),在复数域上有 \(n\) 个根,其对应到复平面上就是单位圆的 \(n\) 等分点,我们将这些单位根从 \(x\) 轴正半轴开始顺时针依次…
FFT/NTT/MTT Tags:数学 作业部落 评论地址 前言 这是网上的优秀博客 并不建议初学者看我的博客,因为我也不是很了解FFT的具体原理 一.概述 两个多项式相乘,不用\(N^2\),通过\(FFT\)可以把复杂度优化到\(O(NlogN)\),\(NTT\)能够取模,\(MTT\)可以对非\(NTT\)模数取模,相对来说\(FFT\)常数小些因为不要取模 二.我们来背板子(FFT) 先放一个板子(洛谷P3803 [模板]多项式乘法(FFT)) #include<iostream>…
FFT&NTT总结 一些概念 \(DFT:\)离散傅里叶变换\(\rightarrow O(n^2)\)计算多项式卷积 \(FFT:\)快速傅里叶变换\(\rightarrow O(nlogn)\)计算多项式卷积 \(NTT:\)快速数论变换\(\rightarrow\)对\(FFT\)的常数优化 \(MTT:\)\(NTT\)的一些拓展 FFT 多项式&卷积 设\(A(x)\)表示一个\(n-1\)次多项式 则\(A(x)=\sum_{i=0}^{n-1}a_ix^i\) 而卷积就是两个…
@(学习笔记)[FFT, NTT] 问题概述 给出两个次数为\(n\)的多项式\(A\)和\(B\), 要求在\(O(n \log n)\)内求出它们的卷积, 即对于结果\(C\)的每一项, 都有\[c_i = \sum_{j = 0}^{n}a_j \cdot b_{i - j}\] 问题求解 大致思路 朴素做法: 考虑按照上面的式子暴力运算, 时间复杂度: \(O(n^2)\) 考虑把多项式化作点值表达, 记\[A(x) =\sum_{i = 0}^n a_i x^i\] 我们把\(A\)和…
@(学习笔记)[FFT, NTT] Problem Description Calculate A * B. Input Each line will contain two integers A and B. Process to end of file. Note: the length of each integer will not exceed 50000. Output For each case, output A * B in one line. Sample Input 1 2…
FFT和NTT真是噩梦呢 既然被FFT和NTT坑够了,坑一下其他的人也未尝不可呢 前置知识 多项式基础知识 矩阵基础知识(之后会一直用矩阵表达) FFT:复数基础知识 NTT:模运算基础知识 单位根介绍 设有一个数a,使得an=1,其中n为满足an=1的最小正整数 满足条件的a有哪些呢? 复数域上的(cos(2π/n)+sin(2π/n)*i)(一般用ωn表示) 模运算中的原根g(mod n+1) 更宽泛地说,只要在一个集合中定义了加法和乘法,而且二者满足: 存在元素“0”,使得加上“0”的结果…
HDU-4609(FFT/NTT) 题意: 给出n个木棒,现从中不重复地选出3根来,求能拼出三角形的概率. 计算合法概率容易出现重复,所以建议计算不合法方案数 枚举选出的最大边是哪条,然后考虑剩下两条边之和小于等于它 两条边之和为\(x\)的方案数可以\(FFT/NTT\)得到,是一个简单的构造 即\(f(x)=\sum x^{length_i}\),求出\(f(x)^2\),就能得到和的方案数,但是会重复,包括自己和自己算,一对算两次 处理一下前缀和即可 #include<bits/stdc+…
FFT NTT错误总结 1 处理\(r\)数组时忘记赋值 r[i] = (r[i >> 1] >> 1) | ((i & 1) << (l - 1)); 2 负数重载运算符 point operator * (point a,point b){ return point(a.x * b.x - a.y * b.y,a.x * b.y + a.y * b.x); } 3 欧拉公式记不清楚 point Wn = point(cos(Pi / mid),type *…
FFT(快速傅立叶变换)和NTT(快速数论变换)看上去很高端,真正搞懂了就很simple了辣. 首先给出多项式的一些定义(初中数学内容): 形如Σaixi的式子就是多项式! 多项式中每个单项式叫做多项式的项. 这些单项式中的最高次数,就是这个多项式的次数. 有几个不同的元也是多项式,但在下面将不被考虑. 注意:(n+1)个点可以唯一确定一个n次多项式(两点定线啊之类的). 然后就是一些比较高明的东西了. 首先在掌握FFT之前我们要掌握一下知识: 1.复数的计算法则. 形如(a+bi)的数叫复数,…
在被两题卡了常数之后,花了很久优化了自己的模板 现在的一般来说任意模数求逆1s跑3e5,exp跑1e5是没啥问题的(自己电脑,可能比luogu慢一倍) 当模数是$998244353,1004535809,9985661441$的时候(这$3$个的原根都是$3$) 我们会使用$ntt$来求解 $ntt$的模板本身常数不大 优化效果不明显 ; ; IL int fsp(int x,int y) { ll now=; while (y) { ) now=now*x%mo; x=1ll*x*x%mo;…
前言 众所周知,这两个东西都是用来算多项式乘法的. 对于这种常人思维难以理解的东西,就少些理解,多背板子吧! 因此只总结一下思路和代码,什么概念和推式子就靠巨佬们吧 推荐自为风月马前卒巨佬的概念和定理都非常到位的总结 推荐ppl巨佬的简明易懂的总结 FFT 多项式乘法的蹊径--点值表示法 一般我们把两个长度为\(n\)的多项式乘起来,就类似于做竖式乘法,一位一位地乘再加到对应位上,是\(O(n^2)\)的 如何优化?直接看是没有思路的,只好另辟蹊径了. 多项式除了我们常用的系数表示法\(y=a_…
$FFT$总结 (因为还不会啊,,都没做过什么题,所以一边学一边打咯.. 1.主要是用来加速卷积形式的求和吧? $F*G(n)=F[i] × G[n-i]$ 平时是$O(n^2)$的,FFT可以$O(nlogn)$ 2.相当于求两个多项式的乘积(你要求的函数是其系数) $A(x)=A0+A1*x+A2*x^2+A3*x^3+...+An−1*x^{n−1}$ $B(x)=B0+B1*x+B2*x^2+B3*x^3+...+Bm−1*x^{m−1}$ 3.具体步骤? 系数表达->点值表达->相乘…
复数及单位根 复数的定义大概就是:\(i^2=-1\),其中\(i\)就是虚数单位. 那么,在复数意义下,对于方程: \[ x^n=1 \] 就必定有\(n\)个解,这\(n\)个解的分布一定是在复平面上,以圆点为圆心,半径为\(1\)的圆的\(n\)等分点. 由于欧拉公式: \[ e^{i\theta}=\cos\theta+i\cdot \sin\theta \] 把\(2\pi\)带入: \[ e^{2i\pi}=1 \] 比较一下这个和上面的方程,设: \[ \omega_n=e^{2i…
做了全家桶然后写了几道入门题. FFT.ref NTT.ref Luogu4238 [模板]多项式求逆 Link 套牛顿迭代完事.有一个细节问题是:这次运算多项式有几项就只赋几项的值,其他位置(次数大于n次的项在\(mod\ {x^n}\)意义下当然为0)一定要设成0(即清空数组),否则会计算错误. Luogu5205 [模板]多项式开根 Link 开根也是牛顿迭代的问题.运算的时候时刻注意是在\(mod\ {x^n}\)意义下进行的,这决定了多项式取的位数. tips:两个长度为n(2的次幂)…
FFT 简介 FFT是干啥的?它是用来加速多项式乘法的.我们平时经常求多项式乘法,比如\((x+1)(x+3)=(x^2+4x+3)\).假设两个式子都是\(n\)项(不足的补0),那朴素的算法是\(O(n^2)\)的. 那么,我们能做到\(O(nlogn)\)做么? 前置知识 多项式点值表示 我们平常表达多项式,都是用系数表达的.当然,还有点值表达.用平面直角坐标系上的\(n\)个点,唯一确定一个(不超过)\(n-1\)次的多项式.它的一个特殊形式,就是两点确定一条直线. 点值转系数表达,你只…
因为垃圾电脑太卡了就重开了一个... 前传:多项式Ⅰ 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}\) 如果我们记 \(…
  进阶篇戳这里. 目录 何为「多项式」 基本概念 系数表示法 & 点值表示法 傅里叶(Fourier)变换 概述 前置知识 - 复数 单位根 快速傅里叶正变换(FFT) 快速傅里叶逆变换(IFFT) 迭代实现 例题 「洛谷 P3803」「模板」多项式乘法(FFT) 题意简述 数据规模 快速数论变换(NTT) 原根 实现 NTT 模数 奇怪的模数 - 任意模数 NTT 三模 NTT 拆系数 FFT(MTT) 七次转五次 五次转四次 例题 「洛谷 P4245」「模板」任意模数 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\) 炸了,…
学了好久,终于基本弄明白了 推荐两个博客: 戳我 戳我 再推荐几本书: <ACM/ICPC算法基础训练教程> <组合数学>(清华大学出版社) <高中数学选修> 预备知识 复数方面 找数学老师去 \[i^{2}=-1,i为虚数的单位\] 坐标系上纵轴就是虚数轴,复数就是这上面的点 三种表示法: \[一般:a + bi,a为实部,b为虚部\] \[指数:e^{i\theta}*坐标系上的模长\] \[三角:模长*(cos\theta + i sin \theta)\] 运算…
本总结主要用于帮助个人理解,讲得不足之处,还请各位看官谅解 FFT 补充知识 \(n\)次单位复根(\(w_n\)): 使得\(z^n=1\)的一类复数,这些复数一共有\(n\)个,它们都分布在复平面的单位圆上,并且连线构成一个正\(n\)边形 点值表示: 多项式\(f(x)=\sum_{i=0}^{n-1}{a_ix^i}\)的点值表示为\(n\)个点\((x_i,y_i)\),其中\(y_i=f(x_i)\) 递归算法主要思路 由折半引理\(w_{2n}^{2k}=w_n^k\),将其代入可…
最近重新学了下卷积,简单总结一下,不涉及细节内容: 1.FFT 朴素求法:$Coefficient-O(n^2)-CoefficientResult$ FFT:$Coefficient-O(nlogn)-Dot-O(n)-DotResult-O(nlogn)-CoefficientResult$ 其中系数到点值的转化称为$DFT(离散傅里叶变换)$,而点值到系数的转为称为$IDFT(傅里叶逆变换)$ 原本朴素的直接带入$n$个值的$DFT$和直接使用拉格朗日插值公式的$IDFT$的复杂度仍为$O…
贴板子啦-- FFT板子:luogu P3803 [模板]多项式乘法(FFT) #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #include<cstdlib> #include<cctype> #include<vector> #include<stack> #in…
题目链接 换一下形式:\[f_i=\sum_{j=0}^{i-1}f_jg_{i-j}\] 然后就是分治FFT模板了\[f_{i,i\in[mid+1,r]}=\sum_{j=l}^{mid}f_jg_{i-j}+\sum_{j=mid+1}^rf_jg_{i-j}\] 复杂度\(O(n\log^2n)\). 分治思路见:https://www.cnblogs.com/SovietPower/p/9366763.html 多项式求逆做法先坑着. //693ms 4.91MB #include <…
目录 FFT 系数表示法 点值表示法 复数 DFT(离散傅里叶变换) 单位根的性质 FFT(快速傅里叶变换) IFFT(快速傅里叶逆变换) NTT 阶 原根 扩展知识 FFT 参考blog: 十分简明易懂的FFT(快速傅里叶变换) 快速傅里叶变换(FFT)详解 (下面的图片是来自于这2篇博客里面的,仔细看可以发现右下角有水印--) 系数表示法 一个一元\(n\)次多项式\(f(x)\)可以被表示为:\[f(x) = \sum_{i = 0}^{n}a_{i}x^{i}\] 即用\(i\)次项的系…