http://blog.miskcoo.com/2015/05/polynomial-division 好神啊!

  通过翻转多项式消除余数的影响,主要原理是商只与次数不小于m的项有关。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. int read()
  9. {
  10. int x=,f=;char c=getchar();
  11. while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
  12. while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
  13. return x*f;
  14. }
  15. #define N 550000
  16. #define P 998244353
  17. int n,m,t,a[N],b[N],r[N],c[N],d[N],e[N],inv3;
  18. int ksm(int a,int k)
  19. {
  20. if (k==) return ;
  21. int tmp=ksm(a,k>>);
  22. if (k&) return 1ll*tmp*tmp%P*a%P;
  23. else return 1ll*tmp*tmp%P;
  24. }
  25. int inv(int a){return ksm(a,P-);}
  26. void DFT(int n,int *a,int p)
  27. {
  28. for (int i=;i<n;i++) if (i<r[i]) swap(a[i],a[r[i]]);
  29. for (int i=;i<=n;i<<=)
  30. {
  31. int wn=ksm(p,(P-)/i);
  32. for (int j=;j<n;j+=i)
  33. {
  34. int w=;
  35. for (int k=j;k<j+(i>>);k++,w=1ll*w*wn%P)
  36. {
  37. int x=a[k],y=1ll*w*a[k+(i>>)]%P;
  38. a[k]=(x+y)%P,a[k+(i>>)]=(x-y+P)%P;
  39. }
  40. }
  41. }
  42. }
  43. void mul(int n,int *a,int *b)
  44. {
  45. DFT(n,a,),DFT(n,b,);
  46. for (int i=;i<n;i++) a[i]=1ll*a[i]*b[i]%P;
  47. DFT(n,a,inv3);
  48. int invn=inv(n);
  49. for (int i=;i<n;i++) a[i]=1ll*a[i]*invn%P;
  50. }
  51. int main()
  52. {
  53. #ifndef ONLINE_JUDGE
  54. freopen("division.in","r",stdin);
  55. freopen("division.out","w",stdout);
  56. const char LL[]="%I64d";
  57. #else
  58. const char LL[]="%lld";
  59. #endif
  60. n=read(),m=read();
  61. for (int i=;i<=n;i++) a[i]=read();
  62. for (int i=;i<=m;i++) b[i]=read();
  63. reverse(b,b+m+);
  64. t=;c[]=inv(b[]);
  65. inv3=inv();
  66. while (t<n-m+)
  67. {
  68. t<<=;
  69. for (int i=;i<t;i++) d[i]=b[i];
  70. t<<=;
  71. for (int i=;i<t;i++) r[i]=(r[i>>]>>)|(i&)*(t>>);
  72. memcpy(e,c,sizeof(e));
  73. mul(t,e,d);
  74. for (int i=;i<t;i++) e[i]=(P-e[i])%P;
  75. e[]=(e[]+)%P;
  76. for (int i=(t>>);i<t;i++) e[i]=;
  77. mul(t,c,e);
  78. for (int i=(t>>);i<t;i++) c[i]=;
  79. t>>=;
  80. }
  81. memcpy(d,a,sizeof(a));
  82. reverse(d,d+n+);
  83. for (int i=n-m+;i<=n;i++) c[i]=d[i]=;
  84. t=;while (t<=(n-m+<<)) t<<=;
  85. for (int i=;i<t;i++) r[i]=(r[i>>]>>)|(i&)*(t>>);
  86. mul(t,c,d);
  87. for (int i=n-m+;i<t;i++) c[i]=;
  88. reverse(c,c+n-m+);
  89. for (int i=;i<=n-m;i++) printf("%d ",c[i]);cout<<endl;
  90. reverse(b,b+m+);
  91. t=;while (t<=n) t<<=;
  92. for (int i=;i<t;i++) r[i]=(r[i>>]>>)|(i&)*(t>>);
  93. mul(t,c,b);
  94. for (int i=;i<m;i++) printf("%d ",(a[i]-c[i]+P)%P);
  95. return ;
  96. }

Luogu4512 【模板】多项式除法(多项式求逆+NTT)的更多相关文章

  1. [BZOJ3625][Codeforces Round #250]小朋友和二叉树 多项式开根+求逆

    https://www.lydsy.com/JudgeOnline/problem.php?id=3625 愉快地列式子.设\(F[i]\)表示权值为\(i\) 的子树的方案数,\(A[i]\)为\( ...

  2. luoguP4238 【模板】多项式求逆 NTT

    Code: #include <bits/stdc++.h> #define N 1000010 #define mod 998244353 #define setIO(s) freope ...

  3. 【learning】多项式相关(求逆、开根、除法、取模)

    (首先要%miskcoo,这位dalao写的博客(这里)实在是太强啦qwq大部分多项式相关的知识都是从这位dalao博客里面学的,下面这篇东西是自己对其博客学习后的一些总结和想法,大部分是按照其博客里 ...

  4. 【BZOJ 4555】[Tjoi2016&Heoi2016]求和 多项式求逆/NTT+第二类斯特林数

    出处0.0用到第二类斯特林数的性质,做法好像很多,我打的是直接ntt,由第二类斯特林数的容斥公式可以推出,我们可以对于每一个i,来一次ntt求出他与所有j组成的第二类斯特林数的值,这个时候我们是O(n ...

  5. bzoj 3625: [Codeforces Round #250]小朋友和二叉树【NTT+多项式开根求逆】

    参考:https://www.cnblogs.com/2016gdgzoi509/p/8999460.html 列出生成函数方程,g(x)是价值x的个数 \[ f(x)=g(x)*f^2(x)+1 \ ...

  6. P4238 【模板】多项式求逆 ntt

    题意:求多项式的逆 题解:多项式最高次项叫度deg,假设我们对于多项式\(A(x)*B(x)\equiv 1\),已知A,求B 假设度为n-1,\(A(x)*B(x)\equiv 1(mod x^{\ ...

  7. 洛谷.4238.[模板]多项式求逆(NTT)

    题目链接 设多项式\(f(x)\)在模\(x^n\)下的逆元为\(g(x)\) \[f(x)g(x)\equiv 1\ (mod\ x^n)\] \[f(x)g(x)-1\equiv 0\ (mod\ ...

  8. JZYZOJ 2043 多项式除法和取余 NTT 多项式

    http://172.20.6.3/Problem_Show.asp?id=2043 最开始用了FFT,交上去全tle和wa了(tle的比较多),测了一组数据发现求逆元的过程爆double了(毕竟系数 ...

  9. [洛谷P4721]【模板】分治 FFT_求逆

    题目大意:给定长度为$n-1$的数组$g_{[1,n)}$,求$f_{[0,n)}$,要求: $$f_i=\sum_{j=1}^if_{i-j}g_j\\f_0=1$$ 题解:分治$FFT$博客,发现 ...

随机推荐

  1. Kubernetes 1.10.4 镜像 版本

    1. gcr.io/google-containers/hyperkube:1.10.4 gcr.io/google_containers/pause-amd64:3.0 gcr.io/google_ ...

  2. [04] Bean的实例化和多个配置文件

    之前我们已经提到过,Spring的核心能力之一就是IOC机制,从上章的示例中我们也可以看到,Spring中的ApplicationContext充当了一个实例化对象的容器的角色,并管理着它们的生命周期 ...

  3. TCP/IP与OSI模型

  4. Hive 创建表

    创建表的三种方式: 方式一:新建表结构 CREATE TABLE emp( empno int, ename string ) ROW FORMAT DELIMITED FIELDS TERMINAT ...

  5. 解决微软surface pro在某些情况下wifi转输速度过慢的问题 - z

    我是新款i7 surface.昨天到的货,狗东. 在公司使用的时候网络很正常,但回到家里之后就特别卡.5G频段也特别卡,基本处于无法观看视频的地步.台式电脑(我台式用的无线网卡)和手机都没问题. 于是 ...

  6. Java HTML to PDF 支持SVG

    尝试一 (现用框架的基础上改动,影响最小化) 最早使用的框架 Xhtmlrenderer,需要把HTML转换成XHTML,引入第二个框架Tidy,Tidy与2010年停止更新,github上的项目也停 ...

  7. 软件工程M1/M2总结及阅读作业总结

    一.软件工程M1/M2总结 写下这篇总结的时候,我们的软件项目尚未完工.虽然尝试申请了延期答辩,但最终未能成功.这意味着,我们的项目能否正常发布已经处于了一个微妙的状态.可能可以,也可能不可以.只能尽 ...

  8. BugPhobia发布篇章:Beta版本学霸在线系统正式发布

    0x00:测试报告版本管理 版本号 具体细节 修订时间 V 1.0 整理第一轮迭代用户管理和登陆注册的功能性验证测试,预计将继续网页对浏览器版本的兼容性测试 2015/11/12 V1.0.1 整理第 ...

  9. Linux内核分析 读书笔记 (第十八章)

    第十八章 调试 18.1 准备开始 1. 需要的只是: 一个bug 一个藏匿bug的内核版本 相关内核代码的知识和运气 2. 在跟踪bug的时候,掌握的信息越多越好. 18.2 内核中的bug 1.  ...

  10. sublime text3修改默认配置文件是失败的解决方法

    如果你修改sublime text3的默认配置文件Preferences.sublime-settings失败,现实的错误信息如下图: 其实根据提示信息就好找问题出在哪里了:权限 要想成功的修改默认配 ...