求两个多项式的卷积对任意数p取模

两个好记的FNT模数:

5*2^25+1

7*2^26+1

原根都为3

 //Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=,g=;
typedef long long LL;
typedef double db;
typedef long double LD;
using namespace std;
int n,m,mod;
LL a[][N],b[][N],p[]={,,},gi[]={,,};
LL ans[N]; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} LL ksc(LL a,LL b,LL p) {
LL tp=a*b-(LL)((LD)a/p*b+1.0e-8)*p;
return tp<?tp+p:tp%p;
} LL ksm(LL a,LL b,LL p) {
LL rs=,bs=a%p;
while(b) {
if(b&) rs=ksc(rs,bs,p);
bs=ksc(bs,bs,p);
b>>=;
}
return rs;
} int l,rev[N];
void FFT(int n,LL a[],int f,int p,int gi) {
For(i,,n-) if(i<rev[i]) swap(a[i],a[rev[i]]);
for(int i=;i<n;i<<=) {
LL wi=ksm((f==)?g:gi,(p-)/(i<<),p);
for(int j=,pp=(i<<);j<n;j+=pp) {
LL w=;
for(int k=;k<i;k++,w=w*wi%p) {
LL x=a[j+k],y=w*a[j+k+i]%p;
a[j+k]=(x+y)%p; a[j+k+i]=(x-y+p)%p;
}
}
}
if(f==-) {
LL inv=ksm(n,p-,p);
For(i,,n) a[i]=a[i]*inv%p;
}
} int main() {
#ifdef ANS
freopen(".in","r",stdin);
freopen(".out","w",stdout);
#endif
read(n); read(m); read(mod);
For(i,,n) { read(a[][i]); a[][i]=a[][i]=a[][i]; }
For(i,,m) { read(b[][i]); b[][i]=b[][i]=b[][i]; }
m+=n;
for(n=;n<=m;n<<=) l++;
For(i,,n) rev[i]=(rev[i>>]>>)|((i&)<<(l-));
For(i,,) {
FFT(n,a[i],,p[i],gi[i]);
FFT(n,b[i],,p[i],gi[i]);
For(j,,n) a[i][j]=a[i][j]*b[i][j]%p[i];
FFT(n,a[i],-,p[i],gi[i]);
}
LL p1=p[],p2=p[],p3=p[];
For(i,,m) {
LL b1=a[][i],b2=a[][i],b3=a[][i],b4;
b4=(ksc(ksc(b1,ksm(p2,p1-,p1),p1*p2),p2,p1*p2)+ksc(ksc(b2,ksm(p1,p2-,p2),p1*p2),p1,p1*p2))%(p1*p2);
LL k=((b3%p3-b4%p3+p3)%p3)*ksm(p1*p2,p3-,p3)%p3;
ans[i]=(b4%mod+k*p1%mod*p2%mod)%mod;
}
For(i,,m) printf("%lld ",ans[i]); puts("");
Formylove;
}

三模数NTT模板的更多相关文章

  1. 【模板篇】NTT和三模数NTT

    之前写过FFT的笔记. 我们知道FFT是在复数域上进行的变换. 而且经过数学家的证明, DFT是复数域上唯一满足循环卷积性质的变换. 而我们在OI中, 经常遇到对xxxx取模的题目, 这就启发我们可不 ...

  2. 洛谷.4245.[模板]任意模数NTT(MTT/三模数NTT)

    题目链接 三模数\(NTT\): 就是多模数\(NTT\)最后\(CRT\)一下...下面两篇讲的都挺明白的. https://blog.csdn.net/kscla/article/details/ ...

  3. 洛谷 4245 【模板】任意模数NTT——三模数NTT / 拆系数FFT

    题目:https://www.luogu.org/problemnew/show/P4245 三模数NTT: 大概是用3个模数分别做一遍,用中国剩余定理合并. 前两个合并起来变成一个 long lon ...

  4. 洛谷 P4245 [模板]任意模数NTT —— 三模数NTT / 拆系数FFT(MTT)

    题目:https://www.luogu.org/problemnew/show/P4245 用三模数NTT做,需要注意时间和细节: 注意各种地方要取模!传入 upt() 里面的数一定要不超过2倍 m ...

  5. 洛谷P4245 【模板】MTT(任意模数NTT)

    题目背景 模板题,无背景 题目描述 给定 22 个多项式 F(x), G(x)F(x),G(x) ,请求出 F(x) * G(x)F(x)∗G(x) . 系数对 pp 取模,且不保证 pp 可以分解成 ...

  6. Luogu 4245 【模板】任意模数NTT

    这个题还有一些其他的做法,以后再补,先记一下三模数$NTT$的方法. 发现这个题不取模最大的答案不会超过$10^5 \times 10^9 \times 10^9 = 10^{23}$,也就是说我们可 ...

  7. 【洛谷P4245】 【模板】任意模数NTT

    三模数 NTT,感觉不是很难写 $?$ 代码借鉴的 https://www.cnblogs.com/Mychael/p/9297652.html code: #include <bits/std ...

  8. MTT:任意模数NTT

    MTT:任意模数NTT 概述 有时我们用FFT处理的数据很大,而模数可以分解为\(a\cdot 2^k+1\)的形式.次数用FFT精度不够,用NTT又找不到足够大的模数,于是MTT就应运而生了. MT ...

  9. 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT)

    再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT) 目录 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Blueste ...

随机推荐

  1. 框架_mybatis1

    mybatis框架是实现与数据之间交互 入门: 创建数据库环境 创建实体类与数据库对应字段 实现Serializable 创建接口定义方法 创建主配置方法: <?xml version=&quo ...

  2. 01_ESP8266 NONO_SDK 创建工程模板

    参考:https://wiki.ai-thinker.com/ai_ide_use  , 仅作为学习笔记. 一.关于报错 注意:Eclipse 只是一个代码编写工具,它并不能读取 makefile 里 ...

  3. PCA分析,及c++代码实现

    本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fengbingchun/article/details/79235028 主成分分析(Principal Co ...

  4. C#/.NET 实现的多屏联动,多屏共享,显示到指定屏幕上

    假设我现在有4个屏幕,希望实现主屏幕在操作的时候,其他3块屏幕可以实时联动,并且延迟在1s以内. 正常情况下,我们可以借助于各个远程软件实现效果,但是有时候会显得笨重麻烦,假如只有一台服务器呢?? S ...

  5. leetcode-263-丑数一

    题目描述: 方法一:递归 class Solution: def isUgly(self, num: int) -> bool: if num == 0: return False if num ...

  6. Nginx的静态代理

    Nginx的静态代理 Nginx的web请求的处理机制 Nginx结合多进程和异步机制对外提供服务,异步机制使用的是异步非阻塞机制,即AIO,Nginx的master进程会生成多个worker进程,m ...

  7. Ruby 数据类型

    Ruby 数据类型 本章节我们将为大家介绍 Ruby 的基本数据类型. Ruby支持的数据类型包括基本的Number.String.Ranges.Symbols,以及true.false和nil这几个 ...

  8. Python sorted list的实现

    Python sorted list的实现 具体思路是用二分保list有序+插入 class SortedList(list): K = -1 def __init__(self, K=-1): li ...

  9. detours3.0文档翻译

    拦截二进制函数 Detours库可以在运行过程中动态拦截函数调用.detours将目标函数前几个指令替换为一个无条件跳转,跳转到用户定义的detour函数.被拦截的函数保存在trampoline函数中 ...

  10. 信息安全-技术-Web:cookie

    ylbtech-信息安全-技术-Web:cookie Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份.进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密 ...