快速链接

  • 原题链接
  • 题目大意
  • 输入格式
  • 输出格式
  • 数据范围
  • 解题思路
    • 前置知识
    • 正文部分
  • 上代码

原题链接

P4238
AC记录:Accepted

题目大意

给定一个多项式 F(x)F(x)F(x),请求出一个多项式 G(x)G(x)G(x),满足 F(x)⋅G(x)≡1(modxn)F(x)\cdot G(x)\equiv 1\pmod{x^n}F(x)⋅G(x)≡1(modxn)。系数对 998244353998244353998244353 取模。

输入格式

第一行一个整数 nnn。
接下来一行 nnn 个数字,从低到高表示 F(x)F(x)F(x) 的系数。

输出格式

一行 nnn 个数字,从低到高表示 G(x)G(x)G(x) 的系数,保证有解。

Sample\mathbf{Sample}Sample Input\mathbf{Input}Input

5
1 6 3 4 9

Sample\mathbf{Sample}Sample Output\mathbf{Output}Output

1 998244347 33 998244169 1020

Hint&Explain\mathbf{Hint\&Explain}Hint&Explain
图像画不出来。(实际上不想做)

数据范围

对于 100%100\%100% 的数据,1≤n≤105,0≤ai≤1091 \le n\le 10^5,0\le a_i \le 10^91≤n≤105,0≤ai​≤109。

解题思路

在介绍本题之前,你需要知道一些前置的知识。


前置知识

1.NTT\texttt{1.NTT}1.NTT
不会NTT的同学可以看我写的关于NTT的详解。
Clickme!\texttt{Click me!}Click me!

正文部分

首先,我们知道
F(x)⋅G(x)≡1(modxn)F(x)\cdot G(x)\equiv 1\pmod{x^n}F(x)⋅G(x)≡1(modxn)
假设我们现在已经求出了 F(x)F(x)F(x) 在模 x⌈n2⌉x^{\left\lceil\frac n2\right\rceil}x⌈2n​⌉ 下的逆元 BBB,则有
F(x)⋅B(x)≡1(modx⌈n2⌉)F(x)\cdot B(x)\equiv 1\pmod{x^{\left\lceil\frac n2\right\rceil}}F(x)⋅B(x)≡1(modx⌈2n​⌉)
两式相减,再同时除以 F(x)F(x)F(x),得
G(x)−B(x)≡0(modx⌈n2⌉)G(x)-B(x)\equiv0\pmod{x^{\left\lceil\frac n2\right\rceil}}G(x)−B(x)≡0(modx⌈2n​⌉)
平方,得
G(x)2−2G(x)B(x)+B(x)2≡0(modxn)G(x)^2-2G(x)B(x)+B(x)^2\equiv0\pmod{x^n}G(x)2−2G(x)B(x)+B(x)2≡0(modxn)
乘上F(x)F(x)F(x),得
G(x)−2B(x)+F(x)B(x)2≡0(modxn)G(x)-2B(x)+F(x)B(x)^2\equiv0\pmod{x^n}G(x)−2B(x)+F(x)B(x)2≡0(modxn)
移项,得
G(x)=2B(x)−F(x)B(x)2(modxn)G(x)=2B(x)-F(x)B(x)^2\pmod{x^n}G(x)=2B(x)−F(x)B(x)2(modxn)
把B(x)B(x)B(x)提取出来,得到
G(x)=(2−F(x)⋅B(x))⋅B(x)(modxn)G(x)=(2-F(x)\cdot B(x))\cdot B(x)\pmod{x^n}G(x)=(2−F(x)⋅B(x))⋅B(x)(modxn)
直接从小到大递归用多项式乘法套公式即可。

上代码

#include<bits/stdc++.h>#define endl '\n'using namespace std;#define int lltypedef long long ll;namespace Polynomial{// The value of the variable below can be changed.const int   max_size_of_array=400000;// The value of the variable above can be changed.const int   maxSize=max_size_of_array+10;const int   g=3,invg=332748118;const int   p=998244353;int         resort[maxSize];int         inv1[maxSize];int         lim,dig;void print_elem(string name,int *f,int len){cout<<name<<":";for(int i=0; i<len; i++)cout<<f[i]<<" ";cout<<endl;return;}int power(int a,int b,int p){int tar=1;for(; b; b>>=1,a=(1ll*a*a)%p)if(b&1)tar=(1ll*tar*a)%p;return tar%p;}void NTT(int *c,int lim,int state){// cout<<"NTT"<<endl;for(int i=0; i<lim; i++)if(i<resort[i])swap(c[i],c[resort[i]]);for(int i=1; i<lim; i<<=1){int W1n=power(g,1ll*(p-1)/(i<<1),p);for(int Size=i<<1,j=0; j<lim; j+=Size){int W=1;for(int k=0; k<i; k++,W=(1ll*W*W1n)%p){int x=(1ll*c[j+k]+p)%p,y=(1ll*W*c[j+i+k]+p)%p;c[j+k]=(1ll*x+y+p)%p;c[j+i+k]=(1ll*x-y+p)%p;// if(j+k==0)// cout<<"\t"<<c[j+k]<<"\tNTT"<<endl;}}}if(state==1)return;int temp=power(lim,p-2,p);reverse(c+1,c+lim);for(int i=0; i<lim; i++)c[i]=1ll*c[i]*temp%p;return;}void getInv(int *f,int *g,int size){// cout<<"getInv "<<size<<" "<<((size+1)>>1)<<endl;// getInv(f,g,size);if(size==1){g[0]=power(f[0],p-2,p);// print_elem("\t",g,size);return;}// print_elem("\t",g,size);getInv(f,g,(size+1)>>1);// print_elem("\t",g,size);lim=1,dig=0;while(lim<(size<<1))lim<<=1,dig++;for(int i=1; i<lim; i++)resort[i]=(resort[i>>1]>>1)|((i&1)<<(dig-1));for(int i=0; i<size; i++)inv1[i]=f[i];for(int i=size; i<lim; i++)inv1[i]=0;NTT(inv1,lim,1);NTT(g,lim,1);for(int i=0; i<lim; i++)g[i]=1ll*((2ll-inv1[i]*g[i]%p+p)%p*g[i]%p+p)%p;NTT(g,lim,-1);for(int i=size; i<lim; i++)g[i]=0;// print_elem("\t",g,size);return;}
}using namespace Polynomial;int         a[maxSize];
int         b[maxSize];
int         n;signed main()
{// ios::sync_with_stdio(false);cin.tie(0);/* Code */cin>>n;for(int i=0; i<n; i++)cin>>a[i];getInv(a,b,n);for(int i=0; i<n; i++)cout<<b[i]<<" ";cout<<endl;return 0;
}

完美切题∼\sim∼

P4238 【模板】多项式乘法逆相关推荐

  1. P4239 任意模数多项式乘法逆(多项式/ MTT)

    P4239 任意模数多项式乘法逆 这个题目简直就是毒瘤,不过还好我们可以使用vector封装要不然真的没法看,现在我们就会用vector封装MTT了,然后有一个代码细节就是这里的求逆还是在模意义下的, ...

  2. 多项式求逆模板(NTT + mod)

    [模板]多项式乘法逆 /*Author : lifehappy */ #include <bits/stdc++.h>using namespace std;typedef long lo ...

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

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

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

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

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

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

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

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

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

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

  8. 洛谷 - P3803 【模板】多项式乘法(FFT/NTT)

    题目链接:点击查看 题目大意:给出两个多项式 F( x ) 和 G( x ) 的系数,求其卷积后的系数 题目分析:存一个FFT的模板,原理学不明白,数论和dp都扔给队友了,当个快乐的fw 代码: // ...

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

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

  10. P4245 【模板】任意模数多项式乘法

    P4245 [模板]任意模数多项式乘法 https://www.luogu.com.cn/blog/AzusaCat/solution-p4245 首先这类问题指的是对于一个非NTT模数,我们如何计算 ...

最新文章

  1. H3C 交换机命名规则
  2. 再爆安全漏洞,这次轮到Jackson了,竟由阿里云上报
  3. KVM虚拟化实践(一)
  4. 千万级并发实现的秘密:内核不是解决方案,而是问题所在!
  5. 数字信号处理学习笔记(四)|实现巴特沃斯型模拟低通滤波器
  6. erdas遥感图像几何校正_定量/高光谱遥感之—光谱分析技术
  7. 若依前后端部署之后验证码不显示
  8. oracle instead of update触发器,oracle INSTEAD OF 触发器
  9. python-web自动化-元素定位
  10. linux中下载迅雷链接
  11. EXCEL的字符串处理公式,自带工作表函数汇总
  12. 雷电模拟器android文件夹在哪,雷电模拟器共享文件夹怎么用_雷电模拟器共享文件夹功能使用方法介绍_3DM手游...
  13. 在 Java 应用程序中访问USB设备
  14. 利用ROUNDUP函数进行内存对齐
  15. Linux上使用腾讯QQ与TIM
  16. 磁条卡,接触式IC卡,非接触式IC卡的优缺点
  17. npm,cnpm的基本使用
  18. 幼师计算机应用基础的认识200字,《计算机应用基础》课程教学与学前教育专业的深度融合...
  19. Augmented Reality Law, Privacy, and Ethics
  20. 计算机窗口颜色不能自定义,用RBG颜色设置自定义颜色

热门文章

  1. 【Visual C++】游戏开发四十九 浅墨DirectX教程十七 三维天空的实现
  2. Mac Finder显示/隐藏文件
  3. 团队用过最好的bug管理软件-delbug管理
  4. hdu 6357 Hills And Valleys (DP)
  5. Educational Codeforces Round 87 (Rated for Div. 2)A. Alarm Clock
  6. $.ligerDialog弹出对话框
  7. PGM——D-map、I-map、perfect-map
  8. 【改变键盘上方向键蹩脚的位置】通过autohotkey脚本实现键盘按键重映射【便利码代码】--以上下左右键映射为capslock与hjkl组合的按键 【附源码】
  9. java程序猿高考试卷,请注意查收!
  10. HTML5CSS3:Day03 2D动画 3D动画 CSS3过渡