JZYZOJ 2042 多项式逆元 NTT 多项式
http://172.20.6.3/Problem_Show.asp?id=2042
题意:求一个次数界为n的多项式在模P并模x^m的意义下的逆元。P=7*17*2^23+1。
多项式逆元的含义以及求逆元的方法:http://blog.miskcoo.com/2015/05/polynomial-inverse
公式推导一下。主要还是NTT的使用,我NTT写错了调了半天,太zz了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<complex>
using namespace std;
#define LL long long
const LL P=(LL)**(<<)+;
const int maxn=;
LL a[maxn]={},b[maxn]={},e[maxn]={},zz[][maxn]={};
int bel[maxn]={};
int bt,s,tot=;
LL mpow(LL x,LL k){
if(k<){x=mpow(x,P-);k=-k;}
LL z=;
while(k){
if(k&)z=(z*x)%P;
x=(x*x)%P;
k/=;
}return z;
}
inline void getit(){ for(int i=;i<s;i++)bel[i]=((bel[i>>]>>)|((i&)<<(bt-))); }
inline void ntt(LL *c,int n,int dft){
for(int i=;i<n;i++)if(bel[i]>i)swap(c[bel[i]],c[i]);
for(int step=;step<n;step<<=){
LL w=mpow(,((P-)/(step*))*dft);
for(int j=;j<n;j+=(step<<)){
LL z=;
for(int i=j;i<j+step;++i){
LL x=c[i],y=(c[i+step]*z)%P;
c[i]=(x+y)%P;
c[i+step]=((x-y)%P+P)%P;
z=(z*w)%P;
}
}
}
if(dft==-){
LL mon=mpow(n,P-);
for(int i=;i<n;i++)c[i]=(c[i]*mon)%P;
}
}
inline void dontt(LL *c,LL *d,int x,int y){
bt=;s=;int z=x+y-;
for(;s<z;++bt)s<<=;
getit();
ntt(c,s,);ntt(d,s,);
for(int i=;i<s;i++)c[i]=(c[i]*d[i])%P;
ntt(c,s,-);ntt(d,s,);
}
inline void doit(int n,int m){
if(m==){++tot; zz[tot][]=mpow(a[],P-); return ;}
doit(n,(m+)/);int siz=(m+)/; ++tot;
for(int i=;i<s;i++)e[i]=b[i]=bel[i]=;
for(int i=;i<siz;i++){zz[tot][i]=(zz[tot-][i]*)%P;b[i]=zz[tot-][i];}
for(int i=min(n,m)-;i>=;--i)e[i]=a[i];
dontt(zz[tot-],b,siz,siz); siz=siz+siz-;
dontt(zz[tot-],e,siz,min(n,m));
for(int i=;i<m;i++)zz[tot][i]=((zz[tot][i]-zz[tot-][i])%P+P)%P;
}
int main(){
//freopen("a.in","r",stdin);
int n,m;scanf("%d%d",&n,&m);
for(int i=;i<n;i++){scanf("%lld",&a[i]);a[i]=((a[i]%P)+P)%P;}
doit(n,m);
for(int i=;i<m;i++)printf("%lld ",zz[tot][i]);
printf("\n");
return ;
}
JZYZOJ 2042 多项式逆元 NTT 多项式的更多相关文章
- luoguP4512 【模板】多项式除法 NTT+多项式求逆+多项式除法
Code: #include<bits/stdc++.h> #define maxn 300000 #define ll long long #define MOD 998244353 # ...
- 【BZOJ3625】【CF438E】小朋友和二叉树 NTT 生成函数 多项式开根 多项式求逆
题目大意 考虑一个含有\(n\)个互异正整数的序列\(c_1,c_2,\ldots ,c_n\).如果一棵带点权的有根二叉树满足其所有顶点的权值都在集合\(\{c_1,c_2,\ldots ,c_n\ ...
- [拉格朗日反演][FFT][NTT][多项式大全]详解
1.多项式的两种表示法 1.系数表示法 我们最常用的多项式表示法就是系数表示法,一个次数界为\(n\)的多项式\(S(x)\)可以用一个向量\(s=(s_0,s_1,s_2,\cdots,s_n-1) ...
- NTT+多项式求逆+多项式开方(BZOJ3625)
定义多项式$h(x)$的每一项系数$h_i$,为i在c[1]~c[n]中的出现次数. 定义多项式$f(x)$的每一项系数$f_i$,为权值为i的方案数. 通过简单的分析我们可以发现:$f(x)=\fr ...
- 【bzoj3456】城市规划 容斥原理+NTT+多项式求逆
题目描述 求出n个点的简单(无重边无自环)无向连通图数目mod 1004535809(479 * 2 ^ 21 + 1). 输入 仅一行一个整数n(<=130000) 输出 仅一行一个整数, 为 ...
- 洛谷5月月赛T30212 玩游戏 【分治NTT + 多项式求ln】
题目链接 洛谷T30212 题解 式子很容易推出来,二项式定理展开后对于\(k\)的答案即可化简为如下: \[k!(\sum\limits_{i = 0}^{k} \frac{\sum\limits_ ...
- 2019.01.01 bzoj3625:小朋友和二叉树(生成函数+多项式求逆+多项式开方)
传送门 codeforces传送门codeforces传送门codeforces传送门 生成函数好题. 卡场差评至今未过 题意简述:nnn个点的二叉树,每个点的权值KaTeX parse error: ...
- 【BZOJ3625】【codeforces438E】小朋友和二叉树 生成函数+多项式求逆+多项式开根
首先,我们构造一个函数$G(x)$,若存在$k∈C$,则$[x^k]G(x)=1$. 不妨设$F(x)$为最终答案的生成函数,则$[x^n]F(x)$即为权值为$n$的神犇二叉树个数. 不难推导出,$ ...
- FFT模板 生成函数 原根 多项式求逆 多项式开根
FFT #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> ...
随机推荐
- C语言复习---零散补充
一:double和float使用scanf获取数据 printf输出float和double都可以用%f,double还可以用%lf. 2 scanf输入float用%f,double输入用%lf,不 ...
- Dubbo学习笔记7:Dubbo的集群容错与负载均衡策略
Dubbo的集群容错策略 正常情况下,当我们进行系统设计时候,不仅要考虑正常逻辑下代码该如何走,还要考虑异常情况下代码逻辑应该怎么走.当服务消费方调用服务提供方的服务出现错误时候,Dubbo提供了多种 ...
- bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战
http://www.lydsy.com/JudgeOnline/problem.php?id=1879 f[i][j] 表示匹配了i个字符,匹配字符串的状态为j的方案数 枚举下一个字符是什么 计算加 ...
- bzoj千题计划187:bzoj1770: [Usaco2009 Nov]lights 燈 (高斯消元解异或方程组+枚举自由元)
http://www.lydsy.com/JudgeOnline/problem.php?id=1770 a[i][j] 表示i对j有影响 高斯消元解异或方程组 然后dfs枚举自由元确定最优解 #in ...
- Linux命令(一)grep查询
grep -n as test1.txt -n : 显示行号 -v: 显示没有搜索字符的一行 -i:忽视大小写 搜索字符串 模式查找
- 从ACM会议分析我国计算机科学近十年发展情况
从ACM会议分析我国计算机科学近十年发展情况 来源:<中国计算机学会通讯>2015年第10期<专栏> 作者:陈 钢 2006年,承蒙李国杰院士推荐,<中国计算机学会通讯& ...
- 20155303 实验三 敏捷开发与XP实践
20155303 实验三 敏捷开发与XP实践 目录 一.编码标准 任务一:在IDEA中使用工具(Code->Reformate Code)格式化代码,并学习Code菜单的功能 二.敏捷开发与XP ...
- flask基础之LocalProxy代理对象(八)
前言 flask框架自带的代理对象有四个,分别是request,session,g和current_app,各自的含义我们在前面已经详细分析过.使用代理而不是显式的对象的主要目的在于这四个对象使用太过 ...
- MySQL灾备恢复在线主从复制变成主主复制及多源复制【转】
生产主主复制(A<--->B),和灾备主从复制(B--->C).当生产出现问题时,数据写入切换到灾备数据库,待生产恢复后,将灾备回写到生产.步骤如下: 1.灾备与生产其中一台建立主主 ...
- WPF 颜色渐变
转自:http://www.360doc.com/content/12/1024/14/7362094_243471690.shtml LinearGradientBrush 类:使用线性渐变绘制区域 ...