https://www.cnblogs.com/HocRiser/p/8207295.html 安利!

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

  

Luogu4725 【模板】多项式对数函数(NTT+多项式求逆)的更多相关文章

  1. luoguP4512 【模板】多项式除法 NTT+多项式求逆+多项式除法

    Code: #include<bits/stdc++.h> #define maxn 300000 #define ll long long #define MOD 998244353 # ...

  2. [模板]多项式全家桶小记(求逆,开根,ln,exp)

    前言 这里的全家桶目前只包括了\(ln,exp,sqrt\).还有一些类似于带余数模,快速幂之类用的比较少的有时间再更,\(NTT\)这种前置知识这里不多说. 还有一些基本的导数和微积分内容要了解,建 ...

  3. [BZOJ3625][CF438E]小朋友和二叉树 (多项式开根,求逆)

    题面 题解 设多项式的第a项为权值和为a的二叉树个数,多项式的第a项表示是否为真,即 则,所以F是三个多项式的卷积,其中包括自己: ,1是F的常数项,即. 我们发现这是一个一元二次方程,可以求出,因为 ...

  4. luogu 4725 【模板】多项式对数函数(多项式 ln)

    $G(x)=ln(A(x))$ $G'(x)=ln'(A(x))A'(x)=\frac{A'(x)}{A(x)}$     由于求导和积分是互逆的,所以对 $G$ 求积分,即 $G(x)=\int\f ...

  5. luogu P4725 多项式对数函数(多项式 ln)

    LINK:多项式对数函数 多项式 ln 如题 是一个模板题.刚学会导数 几个知识点 \([f(x)\cdot g(x)]'=f(x)'g(x)+f(x)g(x)',f(g(x))'=f'(g(x))g ...

  6. 洛谷P4725 【模板】多项式对数函数(多项式运算)

    传送门 前置芝士:微积分(有所了解即可)(可以看看这篇,写得非常详细我看了两章就看不下去了) 以下都是一些简单的教程切莫当真,仅供理解,建议看更严谨的 导数:对于一个函数$f(x)$,它的导数$f'( ...

  7. 多项式对数函数 - NTT

    #include <bits/stdc++.h> using namespace std; #define int long long const int N=4000005; // 4 ...

  8. JZYZOJ 2042 多项式逆元 NTT 多项式

    http://172.20.6.3/Problem_Show.asp?id=2042 题意:求一个次数界为n的多项式在模P并模x^m的意义下的逆元.P=7*17*2^23+1. 多项式逆元的含义以及求 ...

  9. BZOJ 3625 [Codeforces Round #250]小朋友和二叉树 ——NTT 多项式求逆 多项式开根

    生成函数又有奇妙的性质. $F(x)=C(x)*F(x)*F(x)+1$ 然后大力解方程,得到一个带根号的式子. 多项式开根有解只与常数项有关. 发现两个解只有一个是成立的. 然后多项式开根.求逆. ...

  10. 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 \ ...

随机推荐

  1. mskitten

    简介 一个普普通通的Java程序员,在某制造业外企工作. 技术栈 主要是Core Java,准备向Java Web挺进. 非计算机专业学生,在努力提升计算机基本素养(操作系统.算法).有好书好资源欢迎 ...

  2. bootstrapValidator表单验证插件

    bootstrapValidator——一个很好用的表单验证插件,再也不用手写验证规则啦! bootstrapValidator官方文档:http://bootstrapvalidator.votin ...

  3. MemSQL与MySQL不兼容问题总结

    1.数据行Update更新数据行时,如果数据行没有变化,MySQL返回受影响的数据行数为1,但MemSQL返回的数据行数为0. 2.MemSQL不支持唯一约束 3.MemSQL不支持外键约束

  4. Mike and palindrome CodeForces - 798A

    题目链接 一个简单的题目,但是却很少有人可以一次AC,比如我就瞎写wa了一次... 写本博算个教训录吧. 题目给出一个字符串,让你严格的改变一个字符使改变后的字符串是一个回文串. 回文串不用解释了.不 ...

  5. JDK8-新特性-附demo

    import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Base64; impor ...

  6. Git push提交时报错Permission denied(publickey)...Please make sure you have the correct access rights and the repository exists.

    一.git push origin master 时出错 错误信息为: Permission denied(publickey). fatal: Could not read from remote ...

  7. PAT 7-12 拯救007

    在老电影“007之生死关头”(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 —— 直接踩着池子里一系列鳄鱼的大脑袋跳上岸去!(据 ...

  8. HDU 1089 到1096 a+b的输入输出练习

    http://acm.hdu.edu.cn/showproblem.php?pid=1089 Problem Description Your task is to Calculate a + b.T ...

  9. Window.scrollTo()

    摘要 滚动到文档中的某个坐标. 语法 window.scrollTo(x-coord,y-coord ) window.scrollTo(options) 参数 x-coord 是文档中的横轴坐标. ...

  10. 记自己在mybatis中设置jdbcType的一个坑

    项目是用ssm搭建的.主要是为app数据接口.其中有一个需求就app想要查询一段时间内某个用户的测量信息,所以app给我后端传递了3个参数,分别是appuserId(String),startDate ...