• 洛谷 P4245 【模板】任意模数NTT

  • 贴个板子,4次DFT。

Code

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cctype>
using namespace std;
typedef long long LL;
const int N=1e5+5;
const double Pi=acos(-1);
struct comp
{double r,i;inline comp(){}inline comp(double rr,double ii){r=rr,i=ii;}friend inline comp operator +(comp x,comp y){return comp(x.r+y.r,x.i+y.i);}friend inline comp operator -(comp x,comp y){return comp(x.r-y.r,x.i-y.i);}friend inline comp operator *(comp x,comp y){return comp(x.r*y.r-x.i*y.i,x.r*y.i+x.i*y.r);}friend inline comp operator /(comp x,double y){return comp(x.r/y,x.i/y);}friend inline comp conj(comp x){return comp(x.r,-x.i);}
};
int rev[N<<2],a[N],b[N],ans[N<<1];
comp a1[N<<2],b1[N<<2],a2[N<<2],b2[N<<2],wn[N<<2];
inline int read()
{int X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X;
}
void write(int x)
{if(x>9) write(x/10);putchar(x%10+'0');
}
inline void FFT(comp *y,int len,int ff)
{for(int i=0;i<len;i++)if(i<rev[i]) swap(y[i],y[rev[i]]);for(int h=2,d=len>>1;h<=len;h<<=1,d>>=1)for(int i=0,e=h>>1;i<len;i+=h)for(int j=0,cnt=0;j<e;j++,cnt+=d){comp u=y[i+j],v=wn[cnt]*y[i+j+e];y[i+j]=u+v;y[i+j+e]=u-v;}if(ff==-1){reverse(y+1,y+len);for(int i=0;i<len;i++) y[i]=y[i]/len;}
}
int main()
{int n=read()+1,m=read()+1,p=read();for(int i=0;i<n;i++) a[i]=read();for(int i=0;i<m;i++) b[i]=read();int len=1,ll=0;while(len<n+m) len<<=1,ll++;for(int i=0;i<len;i++) rev[i]=rev[i>>1]>>1|(i&1)<<ll-1;for(int i=0;i<=len;i++) wn[i]=comp(cos(2*Pi*i/len),sin(2*Pi*i/len));for(int i=0;i<n;i++) a1[i]=comp(a[i]>>15,a[i]&32767);for(int i=0;i<m;i++) b1[i]=comp(b[i]>>15,b[i]&32767);FFT(a1,len,1),FFT(b1,len,1);for(int i=0;i<len;i++){int j=len-i&len-1;comp ea1=(a1[i]+conj(a1[j]))*comp(0.5,0);comp ea0=(a1[i]-conj(a1[j]))*comp(0,-0.5);comp eb1=(b1[i]+conj(b1[j]))*comp(0.5,0);comp eb0=(b1[i]-conj(b1[j]))*comp(0,-0.5);a2[i]=ea1*eb1+ea1*eb0*comp(0,1);b2[i]=ea0*eb1+ea0*eb0*comp(0,1);}FFT(a2,len,-1),FFT(b2,len,-1);for(int i=0;i<n+m-1;i++){int e1=(LL)round(a2[i].r)%p;int e2=(LL)round(a2[i].i)%p;int e3=(LL)round(b2[i].r)%p;int e4=(LL)round(b2[i].i)%p;ans[i]=((((LL)e1<<30)+((LL)e2+e3<<15)+e4)%p+p)%p;}for(int i=0;i<n+m-1;i++) write(ans[i]),putchar(' ');return 0;
}

洛谷 P4245 【模板】任意模数NTT相关推荐

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

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

  2. 任意模数NTT(MTT)

    前言 众所周知,NTT有几个经典的模数:469762049,998244353,1004535809469762049,998244353,1004535809469762049,998244353, ...

  3. 任意模数ntt_【知识总结】多项式全家桶(三)(任意模数NTT)

    经过两个月的咕咕,"多项式全家桶" 系列终于迎来了第三期--(雾) 先膜拜(伏地膜)大恐龙的博客:任意模数 NTT (在页面右侧面板 "您想嘴谁" 中选择 &q ...

  4. 【知识总结】多项式全家桶(三)(任意模数NTT)

    经过两个月的咕咕,"多项式全家桶" 系列终于迎来了第三期--(雾) 上一篇:[知识总结]多项式全家桶(二)(ln和exp) 先膜拜(伏地膜)大恐龙的博客:任意模数 NTT (在页面 ...

  5. 任意模数ntt_MTT:任意模数NTT

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

  6. 任意模数ntt_任意模数NTT

    任意模数\(NTT\) 众所周知,为了满足单位根的性质,\(NTT\)需要质数模数,而且需要能写成\(a2^{k} + 1\)且\(2^k \ge n\) 比较常用的有\(998244353,1004 ...

  7. 洛谷P4245:【模板】MTT (CRT+三模数NTT)

    题目传送门:https://www.luogu.org/problemnew/show/P4245 题目分析:一道任意模数多项式乘法的模板题.可以写拆项+FFT,或者三模数NTT.我暂时只写了后者. ...

  8. 任意模数NTT(学习笔记)

    FFTFFTFFT有时候会被卡精度?所以可能会有模数,有了模数以后就需要模数的原根. 原根是什么?(留坑待填) NTTNTTNTT有很多种解决方法 1.1.1.特殊模数 (2k+1)∣(p−1),(p ...

  9. 专题·树链剖分【including 洛谷·【模板】树链剖分

    初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...

最新文章

  1. Mac打包Android的apk,[Mac][React Native][Android] 打包成apk
  2. linux下如何让程序无法重复启动
  3. Windows 下noinstall方式安装 mysql-5.7.5-m15-winx64
  4. iPhone销售额下滑12%,但AirPods和手表救了苹果
  5. redis和kafka的写性能对比
  6. linux中oracle数据乱码,Linux系统Oracle数据库乱码问题的解决方法
  7. 科大讯飞回应同传造假:人机耦合才是未来发展之道
  8. js访问对方手机文件夹_求JS大神帮我写个利用JS来实现手机端和PC端访问自动选择样式文件代码...
  9. 二级VB培训笔记10:知识点串讲
  10. 无法在此计算机上安装vmware,电脑中虚拟机无法安装VMware Tools提示D盘找不到setup.exe如何解决...
  11. HDU-2057(16进制的输入输出)
  12. 免费好用的 Apple 工具(Windows 适用)
  13. CF卡弹出磁盘结构损坏且无法读取实测解决教程
  14. CSS学习(一)--选择器
  15. 赛码python多行输入框_在线编程中的数据读取问题牛科网,牛客,赛码
  16. SpringBoot+Mybatis+Mysql结合微信小程序实现登录
  17. 【电脑技巧】如何使用dxdiag查看电脑信息(Win11)
  18. iOS UIAppearance使用详解
  19. linux 打开终端自动运行脚本.barshrc
  20. PHP实现 网页图片上传

热门文章

  1. Matlab cell矩阵处理
  2. 数据分析:JSON格式数据
  3. Android中添加背景音乐的两种方法
  4. Python与C之间的相互调用
  5. 一个可以在github上搜代码段的网站
  6. [云炬创业基础笔记]第十一章创业计划书测试11
  7. 云炬随笔20161117
  8. html判断是否有某个元素,JS基础篇--如何用JavaScript判断dom是否有存在某class的值?...
  9. android.support.v7.app.ActionBarActivity
  10. Java判断首个或最后字符或者字符串是否为指定的字符/字符串