题目:https://www.luogu.org/problemnew/show/P4245 用三模数NTT做,需要注意时间和细节: 注意各种地方要取模!传入 upt() 里面的数一定要不超过2倍 mod! 乘法会爆 long long 时用快速乘! 两次合并的模数,第一次是 (ll) p1*p2,第二次直接对题目的模数取模即可! 注意局部开 (ll)! 合并时用到的逆元每次都一样,所以要先处理好而不是现场快速幂算!! 然而为什么时间还是 Narh 的两倍! 一晚上的心血... 代码如下: #i…
题目链接 三模数\(NTT\): 就是多模数\(NTT\)最后\(CRT\)一下...下面两篇讲的都挺明白的. https://blog.csdn.net/kscla/article/details/79547242 https://blog.csdn.net/zhouyuheng2003/article/details/85561887 模数不是\(NTT\)模数,考虑用多个\(NTT\)模数分别卷积,最后\(CRT\)合并(由中国剩余定理,同余方程组在模\(M=\prod m_i\)的情况下…
题目: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…
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含三个整数N.M.P,分别表示该数列数字的个数.操作的总个数和模数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数乘上k 操作2: 格式:…
[洛谷5月月赛]玩游戏(NTT,生成函数) 题面 Luogu 题解 看一下要求的是什么东西 \((a_x+b_y)^i\)的期望.期望显然是所有答案和的平均数. 所以求出所有的答案就在乘一个逆元就好了. 现在考虑怎么算上面那个东西. 对于单个的计算,我们可以用二项式定理直接展开 得到 \[\begin{aligned}\sum(a+b)^k&=\sum\sum_{i=0}^kC_k^ia^ib^{k-i}\\&=\sum_{i=0}^kC_k^i(\sum a^i)(\sum b^{k-i…
拆系数FFT 对于任意模数 \(mod\) 设\(m=\sqrt {mod}\) 把多项式\(A(x)\)和\(B(x)\)的系数都拆成\(a\times m+b\)的形式,时\(a, b\)都小于\(m\) 提出,那么一个多项式就可以拆成两个多项式的加法 一个是\(a*m\)的,一个是\(b\)的 直接乘法分配律,\(aa\)一遍,\(ab\)一遍,\(ba\),\(bb\)一遍,四遍\(FFT\) 乘出来不会超过取模范围 然后合并直接 \[(a\times m+b)(c\times m+d)…
题目大意:给你两个多项式$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…
题目背景 模板题,无背景 题目描述 给定 22 个多项式 F(x), G(x)F(x),G(x) ,请求出 F(x) * G(x)F(x)∗G(x) . 系数对 pp 取模,且不保证 pp 可以分解成 p = a \cdot 2^k + 1p=a⋅2k+1 之形式. 输入输出格式 输入格式: 输入共 33 行.第一行 33 个整数 n, m, pn,m,p ,分别表示 F(x), G(x)F(x),G(x) 的次数以及模数 pp .第二行为 n+1n+1 个整数, 第 ii 个整数 a_iai​…
三模数 NTT,感觉不是很难写 $?$ 代码借鉴的 https://www.cnblogs.com/Mychael/p/9297652.html code: #include <bits/stdc++.h> #define SIZE 400005 #define ll long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; inline ll qpow(ll x,…
三模NTT 不会... 都0202年了,还有人写三模NTT啊... 讲一个好写点的做法吧: 首先取一个阀值\(w\),然后把多项式的每个系数写成\(aw + c(c < w)\)的形式,换句话说把多项式\(f(x)\)写成两个多项式相加的形式: \[ f(x) = wf_0(x) + f_1(x) \] 这样在这道题中取\(W = 2^{15}\)就可以避免爆long long了. 乘起来的话就是 \[ f \cdot g = (w f_0 + f_1)(wg_0 + g_1) = (f_0 g…