前言

emmm暂无


多项式求逆目的

顾名思义 就是求出一个多项式的摸xn时的逆

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


多项式求逆主要思路

我们考虑用递推的做法

假设我们当前已知F(x)H(x)=1(mod xi/2)

要求的是F(x)Q(x)=1(mod xi)

因为F(x)Q(x)=1(mod xi)

所以F(x)Q(x)=1(mod xi/2)

可得F(x)(Q(x)-H(x))=0(mod xi/2)

显然可得Q(x)-H(x)=0(mod xi/2)

将上述式子两边平方得H(x)2-2Q(x)H(x)+Q(x)2=0(mod xi)

再将两边同时乘上F(x)

因为F(x)Q(x)=1(mod xi)

所以得F(x)H(x)2-2H(x)+Q(x)=0(mod xi)

移项最后得求的G(x)=2H(x)-F(x)H(x)2(mod xi)

那么就可以递推了

初始状态显然为i等于1的情况G(0)为F(0)的逆元

最后的递推式就为

1.if(x=0)-----G(0)=F(0)p-2(p为模数)

2.if(x>0)-----G(x)=2H(x)-F(x)H(x)2(mod xi)


代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define C getchar()-48
inline ll read()
{
ll s=0,r=1;
char c=C;
for(;c<0||c>9;c=C) if(c==-3) r=-1;
for(;c>=0&&c<=9;c=C) s=(s<<1)+(s<<3)+c;
return s*r;
}
const ll p=998244353,G=3,N=2100000;
ll n;
ll rev[N];
ll a[N],b[N],c[N];
inline ll ksm(ll a,ll b)
{
ll ans=1;
while(b)
{
if(b&1) ans=(ans*a)%p;
a=(a*a)%p;
b>>=1;
}
return ans;
}
inline void ntt(ll *a,ll n,ll kd)
{
for(ll i=0;i<n;i++)
if(i<rev[i])
swap(a[i],a[rev[i]]);
for(ll i=1;i<n;i<<=1)
{
ll gn=ksm(G,(p-1)/(i<<1));
for(ll j=0;j<n;j+=(i<<1))
{
ll t1,t2,g=1;
for(ll k=0;k<i;k++,g=1ll*g*gn%p)
{
t1=a[j+k],t2=1ll*g*a[j+k+i]%p;
a[j+k]=(t1+t2)%p,a[j+k+i]=(t1-t2+p)%p;
}
}
}
if(kd==1) return;
ll ny=ksm(n,p-2);
reverse(a+1,a+n);
for(ll i=0;i<n;i++) a[i]=1ll*a[i]*ny%p;
}
inline void work(ll deg,ll *a,ll *b)
{
if(deg==1){b[0]=ksm(a[0],p-2);return;}
work((deg+1)>>1,a,b);
ll len=0,sum=1;
for(;sum<(deg<<1);sum<<=1,len++);
for(ll i=1;i<sum;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<(len-1));
for(ll i=0;i<deg;i++) c[i]=a[i];
for(ll i=deg;i<sum;i++) c[i]=0;
ntt(c,sum,1);ntt(b,sum,1);
for(ll i=0;i<sum;i++) b[i]=1ll*(2-1ll*c[i]*b[i]%p+p)%p*b[i]%p;
ntt(b,sum,-1);
for(ll i=deg;i<sum;i++) b[i]=0;
}
int main()
{
n=read();
for(ll i=0;i<n;i++) a[i]=read();
work(n,a,b);
for(ll i=0;i<n;i++) printf("%lld ",b[i]);
return 0;
}

Re.多项式求逆的更多相关文章

  1. hdu 5730 Shell Necklace [分治fft | 多项式求逆]

    hdu 5730 Shell Necklace 题意:求递推式\(f_n = \sum_{i=1}^n a_i f_{n-i}\),模313 多么优秀的模板题 可以用分治fft,也可以多项式求逆 分治 ...

  2. BZOJ 4555: [Tjoi2016&Heoi2016]求和 [分治FFT 组合计数 | 多项式求逆]

    4555: [Tjoi2016&Heoi2016]求和 题意:求\[ \sum_{i=0}^n \sum_{j=0}^i S(i,j)\cdot 2^j\cdot j! \\ S是第二类斯特林 ...

  3. NTT+多项式求逆+多项式开方(BZOJ3625)

    定义多项式$h(x)$的每一项系数$h_i$,为i在c[1]~c[n]中的出现次数. 定义多项式$f(x)$的每一项系数$f_i$,为权值为i的方案数. 通过简单的分析我们可以发现:$f(x)=\fr ...

  4. BZOJ 3456: 城市规划 与 多项式求逆算法介绍(多项式求逆, dp)

    题面 求有 \(n\) 个点的无向有标号连通图个数 . \((1 \le n \le 1.3 * 10^5)\) 题解 首先考虑 dp ... 直接算可行的方案数 , 容易算重复 . 我们用总方案数减 ...

  5. 洛谷P4841 城市规划(生成函数 多项式求逆)

    题意 链接 Sol Orz yyb 一开始想的是直接设\(f_i\)表示\(i\)个点的无向联通图个数,枚举最后一个联通块转移,发现有一种情况转移不到... 正解是先设\(g(n)\)表示\(n\)个 ...

  6. LOJ2527 HAOI2018 染色 容斥、生成函数、多项式求逆

    传送门 调了1h竟然是因为1004535809写成了998244353 "恰好有\(K\)种颜色出现了\(S\)次"的限制似乎并不容易达到,考虑容斥计算. 令\(c_j\)表示强制 ...

  7. 【BZOJ3625】【CF438E】小朋友和二叉树 NTT 生成函数 多项式开根 多项式求逆

    题目大意 考虑一个含有\(n\)个互异正整数的序列\(c_1,c_2,\ldots ,c_n\).如果一棵带点权的有根二叉树满足其所有顶点的权值都在集合\(\{c_1,c_2,\ldots ,c_n\ ...

  8. 【XSY2612】Comb Avoiding Trees 生成函数 多项式求逆 矩阵快速幂

    题目大意 本题的满二叉树定义为:不存在只有一个儿子的节点的二叉树. 定义一棵满二叉树\(A\)包含满二叉树\(B\)当且经当\(A\)可以通过下列三种操作变成\(B\): 把一个节点的两个儿子同时删掉 ...

  9. 【BZOJ3456】轩辕朗的城市规划 无向连通图计数 CDQ分治 FFT 多项式求逆 多项式ln

    题解 分治FFT 设\(f_i\)为\(i\)个点组成的无向图个数,\(g_i\)为\(i\)个点组成的无向连通图个数 经过简单的推导(枚举\(1\)所在的连通块大小),有: \[ f_i=2^{\f ...

随机推荐

  1. SQLServer存储过程编写规则

    SQLServer编写规则 1.  存储过程 a)         在程序应用中,对于数据库“写”操作的功能通过存储过程来实现. b)        存储过程命名: SP_+表名(+功能名) 对于一个 ...

  2. 简述Servlet的基本概念

    Servlet的基本概念 Servlet的概念 http协议作用于客户端-服务端.由客户端发送请求(Request),服务器端接收到数据之后,向客户端发送响应(Response),这就是请求-响应模式 ...

  3. Spring-注解实现IOC

    一.定义 注解:是一种标记式的配置方式,与XML配置文件不同,注解提供了更大的便捷性,易于维护修改,但是耦合度高. 本质:是一个继承了 Annotation 接口的接口,注解本身并没有什么作用,通过特 ...

  4. 如何在Linux服务器和windows系统之间上传与下载文件

    Do not let dream just be your dream. 背景:Linux服务器文件上传下载. XShell+Xftp安装包(解压即用)百度网盘链接:https://pan.baidu ...

  5. vue学习之vuex

    1  首先还是安装 npm install vuex --save. 2 在src这种创建目录为store 创建 index.js  (getters.js ,actions.js ,mutation ...

  6. 实现DataTables搜索框查询结果高亮显示

    DataTables是封装好的HTML表格插件,丰富了HTML表格的样式,提供了即时搜索.分页等多种表格高级功能.用户可以编写很少的代码(甚至只是使用官方的示例代码),做出一个漂亮的表格以展示数据.关 ...

  7. 基于Android的模拟点击探索

    前言 压力测试中,一般会用到自动化测试.准备写一个APP,可以记录屏幕上的点击事件,然后通过shell命令来模拟自动执行.shell指令,比较容易实现.那么,关键的一步是获取点击的坐标.对于Andro ...

  8. JS 引入方式 基本数据类型 运算符 控制语句 循环 异常

    一.JS引入方式 什么是JavaScript? JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互,JavaScript是浏览 ...

  9. Java导出Excel的Springmvc实例

     @RequestMapping(value = "downloadExcel", method = RequestMethod.GET)  public String downl ...

  10. MyDAL - .UpdateAsync() 之 .SetSegment 根据条件 动态设置 要更新的字段 使用

    索引: 目录索引 一.API 列表 1.SetSegment 属性,指示 根据条件 动态拼接 要修改的字段 见如下示例. 二.API 单表-完整 方法 举例 // update 要赋值的变量 var ...