模板Code
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int mod = 998244353, g = 3, MAXN = 1<<18;
typedef long long LL; inline void change(int arr[], const int &len)
{
register int i, j, k;
for(i = 1, j = len/2; i < len-1; ++i)
{
if(i < j) swap(arr[i], arr[j]);
k = len/2;
while(j >= k) j -= k, k >>= 1;
j += k;
}
} inline int qmul(int a, int b, const int &c)
{
register int ret = 1;
while(b)
{
if(b&1) ret = (LL)ret * a % c;
a = (LL)a * a % c; b >>= 1;
}
return ret;
} inline void NTT(int arr[], const int &len, const int &flg)
{
change(arr, len);
register int wn, w, A0, wA1, i, j, k;
for(i = 2; i <= len; i <<= 1)
{
if(~flg) wn = qmul(g, (mod-1)/i, mod);
else wn = qmul(g, (mod-1) - (mod-1)/i, mod);
for(j = 0; j < len; j += i)
{
w = 1;
for(k = j; k < j + i/2; ++k)
{
A0 = arr[k], wA1 = (LL)w * arr[k + i/2]% mod;
arr[k] = (A0 + wA1) % mod;
arr[k + i/2] = ((A0 - wA1) % mod + mod) % mod;
w = (LL)w * wn % mod;
}
}
}
if(flg == -1)
{
register int rev = qmul(len, mod-2, mod);
for(i = 0; i < len; ++i)
arr[i] = (LL)arr[i] * rev % mod;
}
}
int a[MAXN], b[MAXN], c[MAXN]; void work(const int &deg, int a[], int b[])
{
if(deg == 1) { b[0] = qmul(a[0], mod-2, mod); return; }
work(deg+1>>1, a, b);
register int len = 1;
while(len < deg<<1) len <<= 1;
for(int i = 0; i < deg; ++i) c[i] = a[i];
for(int i = deg; i < len; ++i) c[i] = 0;
NTT(c, len, 1); NTT(b, len, 1);
for(int i = 0; i < len; ++i)
b[i] = (2 - (LL)b[i]*c[i]%mod + mod) % mod * b[i] % mod;
NTT(b, len, -1);
for(int i = deg; i < len; ++i) b[i] = 0;
}
int n;
void init()
{
scanf("%d", &n);
for(int i = 0; i < n; ++i)
scanf("%d", &a[i]);
} void solve()
{
work(n, a, b);
for(int i = 0; i < n; ++i)
printf("%d%c", b[i], i == n-1 ? '\n' : ' ');
} int main ()
{
init(); solve();
}

多项式求逆入门 板题(Luogu P4238)的更多相关文章

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

    手动博客搬家: 本文发表于20181125 13:25:03, 原地址https://blog.csdn.net/suncongbo/article/details/84487306 题目链接: ht ...

  2. 洛谷P4238【模板】多项式求逆

    洛谷P4238 多项式求逆:http://blog.miskcoo.com/2015/05/polynomial-inverse 注意:直接在点值表达下做$B(x) \equiv 2B'(x) - A ...

  3. 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 ...

  4. [模板][P4238]多项式求逆

    NTT多项式求逆模板,详见代码 #include <map> #include <set> #include <stack> #include <cmath& ...

  5. P4238 【模板】多项式求逆

    思路 多项式求逆就是对于一个多项式\(A(x)\),求一个多项式\(B(x)\),使得\(A(x)B(x) \equiv 1 \ (mod x^n)\) 假设现在多项式只有一项,显然\(B(x)\)的 ...

  6. [洛谷P4238]【模板】多项式求逆

    题目大意:多项式求逆 题解:$ A^{-1}(x) = (2 - B(x) * A(x)) \times B(x) \pmod{x^n} $ ($B(x)$ 为$A(x)$在$x^{\lceil \d ...

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

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

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

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

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

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

随机推荐

  1. SET key value [EX seconds] [PX milliseconds] [NX|XX]

    SET key value [EX seconds] [PX milliseconds] [NX|XX] 可用版本: >= 1.0.0 时间复杂度: O(1) 将字符串值 value 关联到 k ...

  2. redis 设置自启动

    redis 设置自启动 1.创建服务(redis.conf 配置文件要注意,经过cp产生了很多个redis.conf) vim /lib/systemd/system/redis.service [U ...

  3. 第4课,python 条件语句if用法

    主题: 智能对话程序的设计 前言: 在编程中存在三大逻辑结构:顺序结构,分支结构(用条件语句if构成),循环结构.其中循环结构能完成,重复次数多,庞大的工作: 分支结构优势不在完成的多,但占有重要位置 ...

  4. t100 debug常用指令

    1.     r.d 程式代號 Find (Ctrl+F) => Find Next(F3). 設中斷點(Toggle):Double Click => Run/Continue the ...

  5. Matlab 信号与系统课设 - BiRadio仿真电台

    BiRadio Matlab 信号与系统课设 - BiRadio仿真电台 Author : Benjamin142857 Date : 2018-12 Video : BiliBili Github ...

  6. Locust性能测试_先登录场景案例

    前言 有很多网站不登录的话,是无法访问到里面的页面的,这就需要先登录了实现场景:先登录(只登录一次),然后访问页面->我的地盘页->产品页->项目页 官方案例 下面是一个简单的loc ...

  7. angular复习笔记1-开篇

    前言 学习和使用angular已经有一段时间了.这段时间利用angular做了一个系统,算是对angular有了一个全面的认识,趁着现在有一些时间,把angular的一些知识记录一下. 安装angul ...

  8. [HNOI2012]矿场搭建 (点双连通)

    题目 [HNOI2012]矿场搭建 解析 这个题做的我十分自闭.. 没看出这个是个点双,然后一晚上+半上午.. 一看肯定和割点有关,我们找到所有的点双,会发现有这么几种情况 连通块中一个割点也没有,这 ...

  9. 你需要知道的 5 个 Linux 新手会犯的失误

    Linux 爱好者们分享了他们犯下的一些最大错误. 终身学习是明智的 —— 它可以让你的思维敏捷,让你在就业市场上更具竞争力.但是有些技能比其他技能更难学,尤其是那些小菜鸟错误,当你尝试修复它们时可能 ...

  10. js模块基础练习题

    题目描述 完成函数 createModule,调用之后满足如下要求: 1.返回一个对象 2.对象的 greeting 属性值等于 str1, name 属性值等于 str2 3.对象存在一个 sayI ...