[Luogu 4245] 任意模数NTT】的更多相关文章

Description 给定 \(2\) 个多项式 \(F(x), G(x)\),请求出 \(F(x) * G(x)\). 系数对 \(p\) 取模,且不保证 \(p\) 可以分解成 \(p = a \cdot 2^k + 1\) 之形式. Solution 设 \(m_1=469762049,m_2=998244353,m_3=1004535809​\),有 \[ \begin{cases} x\equiv c_1\pmod{m_1}\\ x\equiv c_2\pmod{m_2}\\ x\e…
第一眼生成函数.四个等比数列形式的多项式相乘,可以化成四个分式.其中分母部分是固定的,可以多项式求逆预处理出来.而分子部分由于项数很少,询问时2^4算一下贡献就好了.这个思路比较直观.只是常数巨大,以及需要敲一发类似任意模数ntt的东西来避免爆精度.成功以这种做法拿下luogu倒数rank1,至于bzoj不指望能过了. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib>…
题目描述: luogu 题解: 用$fft$水过(什么$ntt$我不知道). 众所周知,$fft$精度低,$ntt$处理范围小. 所以就有了任意模数ntt神奇$fft$! 意思是这样的.比如我要算$F*G$,我可以把这两个多项式各分成两个多项式,一个表示$F_x/M$,一个表示$F_x$%$M$($M$是自己设定的阈值). 比如说$F=a*M+b,G=c*M+d$,那么$F*G=(a*M+b)*(c*M+d)=a*c*M^2+a*d*M+b*c*M+b*d$. 然后?就水过了啊…… 顺便提一下,…
经过两个月的咕咕,"多项式全家桶" 系列终于迎来了第三期--(雾) 上一篇:[知识总结]多项式全家桶(二)(ln和exp) 先膜拜(伏地膜)大恐龙的博客:任意模数 NTT (在页面右侧面板 "您想嘴谁" 中选择 "大恐龙" 就可以在页面左下角戳她哦) 首先务必先学会 NTT (如果不会,请看多项式全家桶(一)),并充分理解中国剩余定理-- 之前提到了,普通 NTT 的模数必须是一个质数,且这个质数中必须有一个足够大的 \(2\) 的幂作为因子.然…
再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT) 目录 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT) 写在前面 一些约定 循环卷积 DFT卷积的本质 Bluestein's Algorithm 例题 分治FFT 例题 FFT的弱常数优化 复杂算式中减少FFT次数 例题 利用循环卷积 小范围暴力 例题 快速幂乘法次数的优化 FFT的强常数优化 DF…
任意模数\(NTT\) 众所周知,为了满足单位根的性质,\(NTT\)需要质数模数,而且需要能写成\(a2^{k} + r\)且\(2^k \ge n\) 比较常用的有\(998244353,1004535809,469762049\),这三个原根都是\(3\) 如果要任意模数怎么办? \(n\)次多项式在模\(m\)下乘积,最终系数一定不会大于\(nm^2\) 所以我们找三个模数分别做\(NTT\)再合并一下就好辣 但这样的合并结果会爆\(long long\)呢 需要用高精吗? 可以使用一些…
题目大意:给你两个多项式$f(x)$和$g(x)$以及一个模数$p(p\leqslant10^9)$,求$f*g\pmod p$ 题解:任意模数$NTT$,最大的数为$p^2\times\max\{n,m\}\leqslant10^{23}$,所以一般选$3$个模数即可,求出这三个模数下的答案,然后中国剩余定理即可. 假设这一位的答案是$x$,三个模数分别为$A,B,C$,那么: $$x\equiv x_1\pmod{A}\\x\equiv x_2\pmod{B}\\x\equiv x_3\pm…
MTT:任意模数NTT 概述 有时我们用FFT处理的数据很大,而模数可以分解为\(a\cdot 2^k+1\)的形式.次数用FFT精度不够,用NTT又找不到足够大的模数,于是MTT就应运而生了. MTT没有模数的限制,比NTT更加自由,应用广泛,可以用于任意模数或很大的数. MTT MTT是基于NTT的,其思想很简单,就是做多次NTT,每次使用不同的素数,然后使用CRT合并解,在合并的过程中模最终模数,或是对于无模数的情况使用高精度. 做NTT的次数取决于最大可能答案的大小,所用的所有素数之积必…
这个题还有一些其他的做法,以后再补,先记一下三模数$NTT$的方法. 发现这个题不取模最大的答案不会超过$10^5 \times 10^9 \times 10^9 = 10^{23}$,也就是说我们可以取三个满足$NTT$性质的模数先算然后再合并起来. 比如三个模数可以分别取$998244353, 1004535809, 469762049$. 那么我们现在要做的就是合并三个同余方程: $$x \equiv a_1(\mod P_1)$$ $$x \equiv a_2(\mod P_2)$$ $…
题目:https://www.luogu.org/problemnew/show/P4245 三模数NTT: 大概是用3个模数分别做一遍,用中国剩余定理合并. 前两个合并起来变成一个 long long 的模数,再要和第三个合并的话就爆 long long ,所以可以用一种让两个模数的乘积不出现的方法:https://blog.csdn.net/qq_35950004/article/details/79477797 x*m1+a1 = -y*m2 + a2  <==>  x*m1+y*m2…