P4238 【模板】多项式求逆
思路
多项式求逆就是对于一个多项式\(A(x)\),求一个多项式\(B(x)\),使得\(A(x)B(x) \equiv 1 \ (mod x^n)\)
假设现在多项式只有一项,显然\(B(x)\)的第0项(常数项)就是\(A(x)\)的第0项(常数项)的逆元(所以\(A(x)\)有没有逆元取决于\(A(x)\)的常数项有没有逆元)
那我们可以利用递归的方法,
现在要求
\]
假设有多项式\(B'(x)\),满足
\]
则要求的\(B(x)\),必定也满足
\]
所以有
(B(x)-B'(x))^2\equiv 0 (mod\ x^{n})\\
B^2(x)-2B(x)B'(x)+B'^2(x)\equiv 0 (mod\ x^{n})\\
\]
两侧都乘\(A(x)\)
\]
所以
\]
递归求解即可
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#define int long long
using namespace std;
const int MOD = 998244353,G = 3, invG = 332748118;
int pow(int a,int b){
int ans=1;
while(b){
if(b&1)
ans=(a*ans)%MOD;
a=(a*a)%MOD;
b>>=1;
}
return ans;
}
void NTT(int *a,int n,int opt){
int lim=0;
while((1<<lim)<n)
lim++;
n=(1<<lim);
for(int i=0;i<n;i++){
int t=0;
for(int j=0;j<lim;j++)
if((i>>j)&1)
t|=(1<<(lim-j-1));
if(t<i)
swap(a[t],a[i]);
}
for(int i=2;i<=n;i<<=1){
int len=i/2;
int tmp=pow((opt)?G:invG,(MOD-1)/i);
for(int j=0;j<n;j+=i){
int mid=1;
for(int k=j;k<j+len;k++){
int t=a[k+len]*mid;
a[k+len]=(a[k]-t+MOD)%MOD;
a[k]=(a[k]+t)%MOD;
mid=(mid*tmp)%MOD;
}
}
}
if(!opt){
int invn=pow(n,MOD-2);
for(int i=0;i<n;i++)
a[i]=(a[i]*invn)%MOD;
}
}
int c[300100],a[300100],b[300100],n;
void get_inv(int times,int *a,int *b){
if(times==1){
b[0]=pow(a[0],MOD-2);
return;
}
get_inv((times+1)>>1,a,b);
while((times<<1)>n)
n<<=1;
for(int i=0;i<times;i++){
c[i]=a[i];
}
for(int i=times;i<n;i++){
c[i]=0;
}
NTT(c,n,1);
NTT(b,n,1);
for(int i=0;i<n;i++){
b[i]=((2-c[i]*b[i]%MOD)%MOD+MOD)%MOD*b[i]%MOD;
}
NTT(b,n,0);
for(int i=times;i<n;i++){
b[i]=0;
}
}
signed main(){
scanf("%lld",&n);
int tx=n;
for(int i=0;i<tx;i++)
scanf("%lld",&a[i]);
n=1;
get_inv(tx,a,b);
for(int i=0;i<tx;i++){
printf("%lld ",(b[i]+MOD)%MOD);
}
return 0;
}
P4238 【模板】多项式求逆的更多相关文章
- 洛谷 P4238 [模板] 多项式求逆
题目:https://www.luogu.org/problemnew/show/P4238 看博客:https://www.cnblogs.com/xiefengze1/p/9107752.html ...
- 多项式求逆元详解+模板 【洛谷P4238】多项式求逆
概述 多项式求逆元是一个非常重要的知识点,许多多项式操作都需要用到该算法,包括多项式取模,除法,开跟,求ln,求exp,快速幂.用快速傅里叶变换和倍增法可以在$O(n log n)$的时间复杂度下求出 ...
- 洛谷.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\ ...
- [模板][P4238]多项式求逆
NTT多项式求逆模板,详见代码 #include <map> #include <set> #include <stack> #include <cmath& ...
- 2018.12.30 洛谷P4238 【模板】多项式求逆
传送门 多项式求逆模板题. 简单讲讲? 多项式求逆 定义: 对于一个多项式A(x)A(x)A(x),如果存在一个多项式B(x)B(x)B(x),满足B(x)B(x)B(x)的次数小于等于A(x)A(x ...
- 洛谷P4238【模板】多项式求逆
洛谷P4238 多项式求逆:http://blog.miskcoo.com/2015/05/polynomial-inverse 注意:直接在点值表达下做$B(x) \equiv 2B'(x) - A ...
- [洛谷P4238]【模板】多项式求逆
题目大意:多项式求逆 题解:$ A^{-1}(x) = (2 - B(x) * A(x)) \times B(x) \pmod{x^n} $ ($B(x)$ 为$A(x)$在$x^{\lceil \d ...
- luogu P4725 多项式对数函数 (模板题、FFT、多项式求逆、求导和积分)
手动博客搬家: 本文发表于20181125 13:25:03, 原地址https://blog.csdn.net/suncongbo/article/details/84487306 题目链接: ht ...
- LG4238 【【模板】多项式求逆】
前言 学习了Great_Influence的递推实现,我给大家说一下多项式求逆严格的边界条件,因为我发现改动一些很小的边界条件都会使程序出错.怎么办,背代码吗?背代码是不可能,这辈子都不会背代码的.理 ...
随机推荐
- mysql 对表字段进行长度截取操作
现在的问题是数据库某一个表中其中的车牌号字段有些数据多了一位,需要把它找出来然后把多的最后一位去掉..... 通过自带的length(字段名)函数把长度过长的数据过滤出来,其中,一个汉字算3个字符,一 ...
- Linux QtCreator 编译报错:No rule to make target '.../***' needed by '***.o'.stop
Linux QtCreator 编译报错:No rule to make target 'mainwindow.cpp' needed by 'mainwindow.o'.stop [1]解决方案 ...
- 安装vm tools时出现如下问题 The path "/usr/bin/gcc" is not valid path to the
sudo suapt-get updateapt-get dist-upgradeapt-get install open-vm-tools-desktop fusereboot https://bl ...
- python小练习:读入一个考试得分,判断这个分数是哪个等级,并输出,考虑异常场景
读入一个考试得分,判断这个分数是哪个等级,并输出. 等级:>=90 优 ,>=80且小于90 良,>=70 且小于80,中,>=60且<70及格 <60 不及格 ...
- golang学习笔记5 用bee工具创建项目 bee工具简介
golang学习笔记5 用bee工具创建项目 bee工具简介 Bee 工具的使用 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/instal ...
- 吴恩达讲了干货满满的一节全新AI课,全程手写板书充满诚意非常干货
吴恩达讲了干货满满的一节全新AI课,全程手写板书充满诚意非常干货 摘要: 目前,AI技术做出的经济贡献几乎都来自监督学习,也就是学习从A到B,从输入到输出的映射.现在,监督学习.迁移学习.非监督学习. ...
- <转>jmeter(十六)配置元件之计数器
本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...
- WordConuts
import java.io.File; import java.io.FileNotFoundException; import java.util.HashMap; import java.uti ...
- The Little Prince-12/04
The Little Prince-12/04 The wheat fields have nothing to say to me. And that is sad. But you have ha ...
- java.lang.Object.wait(Native Method)
java.lang.Object.wait(Native Method) java.lang.Object.wait(Object.java:502) java.util.TimerThread.ma ...