NTT:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 2000050
#define ll long long
#define MOD 998244353
template<typename T>
inline void read(T&x)
{
T f=,c=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){c=*c+ch-'';ch=getchar();}
x = f*c;
}
ll fastpow(ll x,int y)
{
ll ret = ;
while(y)
{
if(y&)ret=ret*x%MOD;
x=x*x%MOD;
y>>=;
}
return ret;
}
int n,m,mx,to[*N],lim=,l;
void ntt(ll *a,int len,int k)
{
for(int i=;i<len;i++)
if(i<to[i])swap(a[i],a[to[i]]);
for(int i=;i<len;i<<=)
{
ll w0 = fastpow(,(MOD-)/(i<<));
for(int j=;j<len;j+=(i<<))
{
ll w = ;
for(int o=;o<i;o++,w=w*w0%MOD)
{
ll w1 = a[j+o],w2 = a[j+o+i]*w%MOD;
a[j+o] = (w1+w2)%MOD;
a[j+o+i] = ((w1-w2)%MOD+MOD)%MOD;
}
}
}
if(k==-)
for(int i=;i<(lim>>);i++)swap(c[i],c[lim-i]);
}
ll a[*N],b[*N],c[*N];
int main()
{
read(n),read(m);mx = max(n,m);
for(int i=;i<=n;i++)read(a[i]);
for(int i=;i<=m;i++)read(b[i]);
while(lim<=*mx)lim<<=,l++;
for(int i=;i<lim;i++)to[i]=((to[i>>]>>)|((i&)<<(l-)));
ntt(a,lim,),ntt(b,lim,);
for(int i=;i<lim;i++)c[i]=a[i]*b[i]%MOD;
ntt(c,lim,-);
ll inv = fastpow(lim,MOD-);
for(int i=;i<lim;i++)c[i]=c[i]*inv%MOD;
for(int i=;i<=n+m;i++)printf("%lld ",c[i]);
puts("");
return ;
}

FFT:

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 2000050
#define ll long long
const double Pi = acos(-1.0);
template<typename T>
inline void read(T&x)
{
T f=,c=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){c=*c+ch-'';ch=getchar();}
x = f*c;
}
struct cp
{
double x,y;
cp(){}
cp(double x,double y):x(x),y(y){}
};
cp operator + (cp &a,cp &b)
{
return cp(a.x+b.x,a.y+b.y);
}
cp operator - (cp &a,cp &b)
{
return cp(a.x-b.x,a.y-b.y);
}
cp operator * (cp &a,cp &b)
{
return cp(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);
}
int n,m,mx,to[*N],lim=,l;
void fft(cp *a,int len,int k)
{
for(int i=;i<len;i++)
if(i<to[i])swap(a[i],a[to[i]]);
for(int i=;i<len;i<<=)
{
cp w0(cos(Pi/i),k*sin(Pi/i));
for(int j=;j<len;j+=(i<<))
{
cp w(,);
for(int o=;o<i;o++,w=w*w0)
{
cp w1 = a[j+o],w2 = a[j+o+i]*w;
a[j+o] = w1+w2;
a[j+o+i] = w1-w2;
}
}
}
}
cp a[*N],b[*N],c[*N];
int main()
{
read(n),read(m);mx = max(n,m);
for(int i=;i<=n;i++)read(a[i].x);
for(int i=;i<=m;i++)read(b[i].x);
while(lim<=*mx)lim<<=,l++;
for(int i=;i<lim;i++)to[i]=((to[i>>]>>)|((i&)<<(l-)));
fft(a,lim,),fft(b,lim,);
for(int i=;i<lim;i++)c[i]=a[i]*b[i];
fft(c,lim,-);
for(int i=;i<=n+m;i++)
printf("%lld ",(ll)(c[i].x/lim+0.5));
puts("");
return ;
}

FFT NTT 模板的更多相关文章

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

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

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

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

  3. 分治FFT/NTT 模板

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

  4. FFT \ NTT总结(多项式的构造方法)

    前言.FFT  NTT 算法 网上有很多,这里不再赘述. 模板见我的代码库: FFT:戳我 NTT:戳我 正经向:FFT题目解题思路 \(FFT\)这个玩意不可能直接裸考的..... 其实一般\(FF ...

  5. [学习笔记&教程] 信号, 集合, 多项式, 以及各种卷积性变换 (FFT,NTT,FWT,FMT)

    目录 信号, 集合, 多项式, 以及卷积性变换 卷积 卷积性变换 傅里叶变换与信号 引入: 信号分析 变换的基础: 复数 傅里叶变换 离散傅里叶变换 FFT 与多项式 \(n\) 次单位复根 消去引理 ...

  6. FFT/NTT/MTT学习笔记

    FFT/NTT/MTT Tags:数学 作业部落 评论地址 前言 这是网上的优秀博客 并不建议初学者看我的博客,因为我也不是很了解FFT的具体原理 一.概述 两个多项式相乘,不用\(N^2\),通过\ ...

  7. $FFT/NTT/FWT$题单&简要题解

    打算写一个多项式总结. 虽然自己菜得太真实了. 好像四级标题太小了,下次写博客的时候再考虑一下. 模板 \(FFT\)模板 #include <iostream> #include < ...

  8. FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅰ

    众所周知,tzc 在 2019 年(12 月 31 日)就第一次开始接触多项式相关算法,可到 2021 年(1 月 1 日)才开始写这篇 blog. 感觉自己开了个大坑( 多项式 多项式乘法 好吧这个 ...

  9. FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅲ

    第三波,走起~~ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅰ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ 单位根反演 今天打多校时 1002 被卡科技了 ...

随机推荐

  1. P5112 FZOUTSY

    传送门 没想到这题还这能用莫队--本来看看以为复杂度会挂的-- 预处理出每个字母开头往后\(k\)个的字符串的哈希值,然后大概就是那道小z的袜子了 而且据说这题的哈希得用自然溢出 //minamoto ...

  2. ipset 学习总结

    用途:当机器受到网络攻击时,使用 iptables 封 IP,有时候可能会封禁成千上万个 IP,如果添加成千上万条规则, 在一台注重性能的服务器或者本身性能就很差的设备上就不在适用了.ipset 就是 ...

  3. 使用Spring MVC的@RequestBody注解接收Json对象字符串

    最近公司在开发移动APP,APP上通过jQuery提交表单的json字符串格式数据到Java后端,之前通过request手动接收,非常麻烦,其实Spring MVC已经为我们提供了一个注解@Reque ...

  4. Jquery | 基础 | 慕课网 | (*选择器)

    原生JS var elements1 = document.getElementsByTagName('*'); JQ var elements2 = $("*"); <!D ...

  5. swiper.js插件的使用

    swiper切换动画效果,需要先加载swiper.animate.min.js和animate.min.css. <!DOCTYPE html><html>    <he ...

  6. Codeforces Round #324 (Div. 2)

    CF的rating设置改了..人太多了,决定开小号打,果然是明智的选择! 水 A - Olesya and Rodion #include <bits/stdc++.h> using na ...

  7. 双拓扑排序 HDOJ 5098 Smart Software Installer

    题目传送门 /* 双拓扑排序:抄的,以后来补 详细解释:http://blog.csdn.net/u012774187/article/details/40736995 */ #include < ...

  8. AJPFX总结内部类

    内部类:内部类的访问规则:1. 内部类可以直接访问外部类中的成员,包括私有   原因是内部类中持有了一个外部类的引用,格式:外部类.this2. 外部类要访问内部类,必须建立内部类对象访问格式:1.  ...

  9. 前端的百度地图的api的使用

    1.打开百度地图官方api网页 http://lbsyun.baidu.com/ 2.点击开发文档 3.选择对应的api 4.点击DEMO详情 5.得到源码复制到你的代码中 <!DOCTYPE ...

  10. 在idea启动tomcat出现The JAVA_HOME environment variable is not defined correctly的解决

    情况:某套代码是用jdk 1.6编译,然后电脑的JAVA_HOME系统变量配的是jdk1.7的,在tomcat启动时报错 The JAVA_HOME environment variable is n ...