NTT(快速数论变换)用到的各种素数及原根:

https://blog.csdn.net/hnust_xx/article/details/76572828

NTT多项式乘法模板

#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; typedef long long LL; const LL mod=; //119*2^23+1 g=3 const int N=(<<)+; const int g=; int rev[N]; LL a[N],b[N]; template<typename T>
void read(T &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} LL Pow(LL a,LL b)
{
LL res=;
for(;b;a=a*a%mod,b>>=)
if(b&) res=res*a%mod;
return res;
} void NTT(LL *a,int n,int f)
{
for(int i=;i<n;++i)
if(i<rev[i]) swap(a[i],a[rev[i]]);
for(int i=;i<n;i<<=)
{
LL wn=Pow(g,(mod-)/(i*));
if(f<) wn=Pow(wn,mod-);
for(int j=,p=i<<;j<n;j+=p)
{
LL w=;
for(int k=;k<i;++k,w=w*wn%mod)
{
int x=a[j+k],y=w*a[j+k+i]%mod;
a[j+k]=(x+y)%mod; a[j+k+i]=(x-y+mod)%mod;
}
}
}
if(f<)
{
LL inv=Pow(n,mod-);
for(int i=;i<n;++i) a[i]=a[i]*inv%mod;
}
} int main()
{
int nn,mm;
read(nn); read(mm);
for(int i=;i<=nn;++i) read(a[i]);
for(int i=;i<=mm;++i) read(b[i]);
int l=,len=nn+mm;
int n;
for(n=;n<=len;n<<=) l++;
for(int i=;i<n;++i) rev[i]=(rev[i>>]>>)|((i&)<<l-);
NTT(a,n,);
NTT(b,n,);
for(int i=;i<n;++i) a[i]=a[i]*b[i]%mod;
NTT(a,n,-);
for(int i=;i<=len;++i) printf("%lld ",a[i]);
}

NTT模板的更多相关文章

  1. 多项式FFT/NTT模板(含乘法/逆元/log/exp/求导/积分/快速幂)

    自己整理出来的模板 存在的问题: 1.多项式求逆常数过大(尤其是浮点数FFT) 2.log只支持f[0]=1的情况,exp只支持f[0]=0的情况 有待进一步修改和完善 FFT: #include&l ...

  2. 【文文殿下】【洛谷】分治NTT模板

    题解 可以计算每一项对后面几项的贡献,然后考虑后面每一项,发现这是一个卷积,直接暴力NTT就行了,发现它是一个有后效性的,我们选择使用CDQ分治. Tips:不能像通常CDQ分治一样直接 每次递归两边 ...

  3. FFT/NTT模板 既 HDU1402 A * B Problem Plus

    @(学习笔记)[FFT, NTT] Problem Description Calculate A * B. Input Each line will contain two integers A a ...

  4. FFT NTT 模板

    NTT: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; # ...

  5. 分治FFT/NTT 模板

    题目要我们求$f[i]=\sum\limits_{j=1}^{i}f[i-j]g[j]\;mod\;998244353$ 直接上$NTT$肯定是不行的,我们不能利用尚未求得的项卷积 所以要用$CDQ$ ...

  6. 快速数论变换NTT模板

    51nod 1348 乘积之和 #include <cmath> #include <iostream> #include <cstdio> #include &l ...

  7. NTT模板(无讲解)

    #include<bits/stdc++.h>//只是在虚数部分改了一下 using namespace std; typedef long long int ll; ; ; ; ; ll ...

  8. 三模数NTT模板

    求两个多项式的卷积对任意数p取模 两个好记的FNT模数: 5*2^25+1 7*2^26+1 原根都为3 //Achen #include<algorithm> #include<i ...

  9. 【模板】NTT

    NTT模板 #include<bits/stdc++.h> using namespace std; #define LL long long const int MAXL=22; con ...

随机推荐

  1. [转]能用HTML/CSS解决的问题就不要使用JS

    原文链接:http://www.codeceo.com/article/html-css-not-js.html 为什么说能使用html/css解决的问题就不要使用JS呢?两个字,因为简单.简单就意味 ...

  2. python 时间转换相关

    最近需要操作时间的地方相当的多,包括打点,包括时间转换. 罗列最近遇到的两个需求. 1. 关于上篇文章写的base64上传图片的问题,我使用了打点来计算解码需要多少时间.这个对时间精度要求是比较高的. ...

  3. GlusterFS卷的自我修复功能

    一.创建环境 1.查看状态 gluster volume status 2.vim /etc/fstab 注释开机挂载 3.重启 reboot 4.查看状态 如果状态Online项为“N”的GH01存 ...

  4. 最实用的深度学习教程 Practical Deep Learning For Coders (Kaggle 冠军 Jeremy Howard 亲授)

    Jeremy Howard 在业界可谓大名鼎鼎.他是大数据竞赛平台 Kaggle 的前主席和首席科学家.他本人还是 Kaggle 的冠军选手.他是美国奇点大学(Singularity Universi ...

  5. 设计模式笔记:适配器模式(Adapter)

    1. 适配器模式简介 1.1 模式定义 适配器模式:通过一个类的接口转换成客户希望的另外一个接口,使原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适配器从结构上分为:类适配器和对象适配器.其 ...

  6. 将关系型数据库抽取成redis的思路

    思路是 先把id抽取出来形成一个·list表示数量 然后再把表变成键值对形式把id当做成键

  7. codeforces369A

    Valera and Plates CodeForces - 369A Valera is a lazy student. He has m clean bowls and k clean plate ...

  8. 浅谈教你如何掌握Linux系统

    linux能做什么?相信绝大数人都有这样的疑问.可以玩吃鸡吗?可以玩lol吗? 如果你是以娱乐的名义来评价linux的可用性,对不起,linux可能不适合你,因为linux是一个工具,他是教你聪明的, ...

  9. 【Linux】自动执行Mysql常用命令脚本

    wamp环境下,我可以手敲一遍,但是lamp环境下我绝对不会手敲一遍 好吧~写脚本的确也是一遍~~~~(>_<)~~~~ 函数和后面的触发器中文档上局部是有错误的,所以大家不要一味的相信文 ...

  10. The Shortest Statement CodeForces - 1051F(待测试)

    #include <iostream> #include <cstdio> #include <sstream> #include <cstring> ...