题目描述

给定一个多项式F(x)F(x)F(x),请求出一个多项式G(x)G(x)G(x),满足F(x)∗G(x)≡1(mod xn)F(x)∗G(x)≡1(modxn)F(x)∗G(x)≡1(mod\ x^n )。系数对998244353998244353998244353取模。

输入输出格式

输入格式:
首先输入一个整数nnn,表示输入多项式的次数。
接着输入n" role="presentation" style="position: relative;">nnn个整数,第iii个整数ai" role="presentation" style="position: relative;">aiaia_i,代表F(x)F(x)F(x)次数为i−1i−1i−1的项的系数。

输出格式:
输出nnn个数字,第i" role="presentation" style="position: relative;">iii个整数bibib_i,代表G(x)G(x)G(x)次数为i−1i−1i−1的项的系数。

输入输出样例

输入样例#1:
5
1 6 3 4 9
输出样例#1:
1 998244347 33 998244169 1020
说明
1≤n≤105,0≤ai≤1091≤n≤105,0≤ai≤1091≤n≤10^5 ,0≤a_i≤10^9

分析:
多项式求逆的模板题。之前一直不知道后面的(mod xn)(modxn)(mod\ x^n)是什么意思,其实是对多项式xnxnx^n取模,也就是次数大于nnn的项为0" role="presentation" style="position: relative;">000。设A(x)A(x)A(x)为原多项式,B′(x)B′(x)B'(x)为在mod xn/2modxn/2mod\ x^{n/2}的逆元,B(x)B(x)B(x)为在mod xnmodxnmod\ x^{n}逆元,这里是向上取整,因为这样才能使幂次达到nnn。有

B(x)=2B′(x)−A(x)∗B′2(x)" role="presentation" style="text-align: center; position: relative;">B(x)=2B′(x)−A(x)∗B′2(x)B(x)=2B′(x)−A(x)∗B′2(x)

B(x)=2B'(x)-A(x)*B’^2(x)
后面那个是两个卷积,次数要算对,wa了好久。

代码:

// luogu-judger-enable-o2
#include <iostream>
#include <cstdio>
#include <cmath>
#define LL long longconst LL p=998244353;
const LL G=3;
const int maxn=3e5+7;using namespace std;LL f[maxn],g[maxn],x[maxn],y[maxn],w[maxn];
LL n,len;
LL r[maxn];LL power(LL x,LL y)
{if (y==1) return x;LL c=power(x,y/2);c=(c*c)%p;if (y%2) c=(c*x)%p;return c;
}void init(LL len)
{LL k=trunc(log(len+0.5)/log(2));for (LL i=0;i<len;i++){r[i]=(r[i>>1]>>1)|((i&1)<<(k-1));}
}void ntt(LL *a,LL f)
{for (LL i=0;i<len;i++){if (i<r[i]) swap(a[i],a[r[i]]);}   w[0]=1;for (LL i=2;i<=len;i*=2){LL wn;if (f==1) wn=power(G,(LL)(p-1)/i);else wn=power(G,(LL)(p-1)-(p-1)/i);for (LL j=i/2;j>=0;j-=2) w[j]=w[j/2];for (LL j=1;j<i/2;j+=2) w[j]=(w[j-1]*wn)%p;for (LL j=0;j<len;j+=i){for (LL k=0;k<i/2;k++){LL u=a[j+k],v=(a[j+k+i/2]*w[k])%p;a[j+k]=(u+v)%p;a[j+k+i/2]=(u-v+p)%p;}}}if (f==-1){LL inv=power(len,p-2);for (LL i=0;i<len;i++) a[i]=(a[i]*inv)%p;}
}void NTT(LL *a,LL *b,LL *c,LL n,LL m)
{   len=1;while (len<=(n+m)) len*=2;init(len);for (int i=0;i<len;i++){if (i<n) x[i]=a[i]; else x[i]=0;if (i<m) y[i]=b[i]; else y[i]=0;}   ntt(x,1); ntt(y,1);for (LL i=0;i<len;i++) c[i]=(2*y[i]+p-x[i]*y[i]%p*y[i]%p)%p;ntt(c,-1);
}void solve(LL *a,LL *b,LL k)
{if (k==1){       b[0]=power(a[0],p-2);return;     }LL d=(k+1)/2;solve(a,b,d);   NTT(a,b,b,n,k);for (int i=k;i<len;i++) b[i]=0;
}int main()
{scanf("%lld",&n);for (LL i=0;i<n;i++){scanf("%lld",&f[i]);f[i]%=p;}   solve(f,g,n);for (LL i=0;i<n;i++) printf("%lld ",g[i]);
}

洛谷 P4238 【模板】多项式求逆 ntt相关推荐

  1. 【BZOJ 4555】[Tjoi2016Heoi2016]求和 多项式求逆/NTT+第二类斯特林数

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

  2. 洛谷P4239 【模板】多项式求逆(加强版)(多项式求逆)

    传送门 咱用的是拆系数\(FFT\)因为咱真的不会三模数\(NTT\)-- 简单来说就是把每一次多项式乘法都改成拆系数\(FFT\)就行了 如果您还不会多项式求逆的左转->这里 顺带一提,因为求 ...

  3. luogu P4238 多项式求逆 (模板题、FFT)

    luogu P4238 多项式求逆 (模板题.FFT) 手动博客搬家: 本文发表于20181125 13:21:46, 原地址https://blog.csdn.net/suncongbo/artic ...

  4. 洛谷P4233 射命丸文的笔记 【多项式求逆】

    题目链接 洛谷P4233 题解 我们只需求出总的哈密顿回路个数和总的强联通竞赛图个数 对于每条哈密顿回路,我们统计其贡献 一条哈密顿回路就是一个圆排列,有\(\frac{n!}{n}\)种,剩余边随便 ...

  5. 【洛谷P4233】— 射命丸文的笔记(竞赛图+多项式求逆)

    传送门 考虑强连通竞赛图哈密顿回路总数很好求 为(n−1)!2(n2)−n(n-1)!2^{{n\choose 2}-n}(n−1)!2(2n​)−n 现在问题是求强连通竞赛图数 设fif_ifi​为 ...

  6. luogu P4512 多项式除法 (模板题、FFT、多项式求逆)

    luogu P4512 多项式除法 (模板题.FFT.多项式求逆) 手动博客搬家: 本文发表于20181206 14:42:53, 原地址https://blog.csdn.net/suncongbo ...

  7. luogu P4726 多项式指数函数(模板题FFT、多项式求逆、多项式对数函数)

    luogu P4726 多项式指数函数(模板题FFT.多项式求逆.多项式对数函数) 手动博客搬家: 本文发表于20181127 08:39:42, 原地址https://blog.csdn.net/s ...

  8. luogu P4725 多项式对数函数 (模板题、FFT、多项式求逆、求导和积分)

    luogu P4725 多项式对数函数 (模板题.FFT.多项式求逆.求导和积分) 手动博客搬家: 本文发表于20181125 13:25:03, 原地址https://blog.csdn.net/s ...

  9. P4233-射命丸文的笔记【NTT,多项式求逆】

    正题 题目链接:https://www.luogu.com.cn/problem/P4233 题目大意 随机选择一条有哈密顿回路的nnn个点的竞赛图,求选出图的哈密顿回路的期望个数. 对于每个n∈[1 ...

  10. 【学习笔记】超简单的多项式求逆(含全套证明)

    整理的算法模板合集: ACM模板 目录 多项式求逆 一.分治FFT 二.倍增法及其证明 三.多项式求逆例题 P4238 [模板]多项式乘法逆 点我看多项式全家桶(●^◡_◡◡​^●) 多项式求逆 一. ...

最新文章

  1. instant apps_Android Instant Apps 101:它们是什么以及它们如何工作
  2. red hat关于桥接模式连不上外网或者没有IP
  3. PCDN实现flash无延时直播的技术原理与优点
  4. hadoop api 复制文件_Hadoop发布新组件:分布式对象存储系统Ozone
  5. python3爬虫入门(urllib和requests简单使用)
  6. MySQL 5.7临时表空间怎么玩才能不掉坑里
  7. Vue学习(vuex)-学习笔记
  8. 实现verilog设计控制交通灯
  9. 富爸爸系列之三富爸爸投资指南
  10. Perl语言及安装运行环境
  11. mysql写保护_简易修改注册表!小白都会去掉u盘写保护
  12. 如何使用微信编辑器排版微信公众号内容?
  13. 如何批量给pdf文件加密?
  14. 冰点文库最新版3210
  15. ffmpeg Windows下录制桌面视频命令
  16. MySQL前缀索引和索引选择性
  17. 物联网卡能否长期使用 有没有限制
  18. 电子书《寿康宝鉴》(附白话)全文连载(一)
  19. tcp协议的三次握手
  20. 计算机启动键盘无法使用,win7开机键盘不能用如何解决_windows7开机键盘无法使用解决教程...

热门文章

  1. c语言 switch整型,c语言switch型别强制转换的问题。
  2. openwrt校园网自动登录且断网重连
  3. 数字孪生 软著登记表 模板
  4. 4个团队领导必备的技能和素质
  5. Rust语言——Package、Crate、Module
  6. oracle 12c id 自增,Oracle 12c Identity Columns 新特性 和 序列 构成自增列
  7. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十五║初探SSR服务端渲染(个人博客二)...
  8. 2015第二届上海国际机上内饰与翻新展览会
  9. UNITY个人版设置深色主题
  10. word方框中打√符号的方法