NTT模板
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模板的更多相关文章
- 多项式FFT/NTT模板(含乘法/逆元/log/exp/求导/积分/快速幂)
自己整理出来的模板 存在的问题: 1.多项式求逆常数过大(尤其是浮点数FFT) 2.log只支持f[0]=1的情况,exp只支持f[0]=0的情况 有待进一步修改和完善 FFT: #include&l ...
- 【文文殿下】【洛谷】分治NTT模板
题解 可以计算每一项对后面几项的贡献,然后考虑后面每一项,发现这是一个卷积,直接暴力NTT就行了,发现它是一个有后效性的,我们选择使用CDQ分治. Tips:不能像通常CDQ分治一样直接 每次递归两边 ...
- FFT/NTT模板 既 HDU1402 A * B Problem Plus
@(学习笔记)[FFT, NTT] Problem Description Calculate A * B. Input Each line will contain two integers A a ...
- FFT NTT 模板
NTT: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; # ...
- 分治FFT/NTT 模板
题目要我们求$f[i]=\sum\limits_{j=1}^{i}f[i-j]g[j]\;mod\;998244353$ 直接上$NTT$肯定是不行的,我们不能利用尚未求得的项卷积 所以要用$CDQ$ ...
- 快速数论变换NTT模板
51nod 1348 乘积之和 #include <cmath> #include <iostream> #include <cstdio> #include &l ...
- NTT模板(无讲解)
#include<bits/stdc++.h>//只是在虚数部分改了一下 using namespace std; typedef long long int ll; ; ; ; ; ll ...
- 三模数NTT模板
求两个多项式的卷积对任意数p取模 两个好记的FNT模数: 5*2^25+1 7*2^26+1 原根都为3 //Achen #include<algorithm> #include<i ...
- 【模板】NTT
NTT模板 #include<bits/stdc++.h> using namespace std; #define LL long long const int MAXL=22; con ...
随机推荐
- [MS] 微软官网下载安装SQLSERVER2019的rpm
快速入门:安装 SQL Server 和 Red Hat 上创建数据库 https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-co ...
- Qt__输入对话框(QInputDialog)
#include <QInputDialog> ...... bool isOK; QString text = QInputDialog::getText(NULL, "Inp ...
- 开发一个微信小程序实例教程
一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...
- 关于Spring MVC跨域
1.Sping MVC 3.X跨域 关于跨域问题,主要用的比较多的是cros跨域. 详细介绍请看https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Ac ...
- xhtml 意義
xhtml是html和xml的結合體. xhtml包含所有xml和html4.0結合的部分. xml是描述語言,html是顯示語言.二者結合可以產生形式良好的文檔. 不僅可以適用與電腦瀏覽器,也可以適 ...
- docker --Nexus仓库
Nexus 简介 Nexus 是个仓库管理器,目前主要分2大版本:2.X 和 3.X.2.X 主要支持的格式是Maven.P2.OBR.Yum.3.X主要支持的是Docker.NuGet.npm.Bo ...
- HDU4296-ChengduOnling-贪心
某人要搬砖盖一栋楼,有m块砖,每块有两个值w和s,表示重量和强度.楼盖好后每块砖有一个危险值,表示为此砖之上的砖的重量和减此砖的强度,即Σ0(j-1)w - sj. 整体危险值是每块砖危险值的最大值. ...
- hdu 3727 Jewel (可持久化线段树+bit)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=3727 题意: 对一段序列进行四种操作: Insert x :在序列尾部插入一个x: Query_1 s ...
- hdu 6406 Taotao Picks Apples (2018 Multi-University Training Contest 8 1010)(二分,前缀和)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6406 思路: 暴力,预处理三个前缀和:[1,n]桃子会被摘掉,1到当前点的最大值,1到当前点被摘掉的桃子的 ...
- Codeforces Round #440 (Div. 2) A,B,C
A. Search for Pretty Integers time limit per test 1 second memory limit per test 256 megabytes input ...