NTT+多项式求逆
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll long long
#define N 300005
using namespace std;
const int ni = ;
const int p = ;
ll pw(ll x,int y)
{
ll lst=;
while(y)
{
if(y&)lst=(lst*x)%p;
y>>=;
x=(x*x)%p;
}
return lst;
}
int n,m;
int c[N],a[N],b[N],R[N];
int invb[N];
int ji[N],jie[N],nini[N];
int tmp[N];
void fft(int *a,int n,int f)
{
for(int i=;i<n;i++)if(R[i]>i)swap(a[i],a[R[i]]);
for(int i=;i<n;i<<=)
{
int wn=pw(ni,((p-)/(i<<)*f+p-)%(p-));
for(int j=;j<n;j+=(i<<))
{
int w=;
for(int k=;k<i;k++,w=((ll)w*wn)%p)
{
int x=a[j+k];int y=((ll)a[j+i+k]*w)%p;
a[j+k]=(x+y)%p;a[j+k+i]=(x-y+p)%p;
}
}
}
if(f==-)
{
ll nii=pw(n,p-);
for(int i=;i<n;i++)a[i]=(ll)a[i]*nii%p;
}
return ;
}
void get_inv(int *a,int *b,int n)
{
if(n==)
{
b[]=pw(a[],p-);
return ;
}
get_inv(a,b,n>>);
for(int i=;i<n;i++)tmp[i]=a[i];
int l=;int nn=;
while(nn<n<<)nn<<=,l++;
for(int i=;i<nn;i++)R[i]=(R[i>>]>>)|((i&)<<(l-));
fft(tmp,nn,);fft(b,nn,);
for(int i=;i<nn;i++)
b[i]=((ll)b[i]*(-(ll)tmp[i]*b[i]%p+p))%p;
fft(b,nn,-);
memset(b+n,,sizeof(int)*n);
}
int main()
{
scanf("%d",&n);
int l=;
for(m=n,n=;n<=m;n<<=)l++;
nini[]=jie[]=ji[]=;
for(int i=;i<n;i++)jie[i]=((ll)jie[i-]*i)%p;
for(int i=;i<n;i++)
b[i]=pw(,((ll)i*(i-)>>)%(p-))*pw(jie[i],p-)%p;
for(int i=;i<n;i++)
c[i]=pw(,((ll)i*(i-)>>)%(p-))*pw(jie[i-],p-)%p;
get_inv(b,invb,n);
l++;int tp=n<<;
for(int i=;i<tp;i++)R[i]=(R[i>>]>>)|((i&)<<(l-));
fft(invb,tp,);
fft(c,tp,);
for(int i=;i<tp;i++)a[i]=(ll)invb[i]*c[i]%p;
fft(a,tp,-);
printf("%d\n",(ll)a[m]*jie[m-]%p);
return ;
}
NTT+多项式求逆的更多相关文章
- 【bzoj3456】城市规划 容斥原理+NTT+多项式求逆
题目描述 求出n个点的简单(无重边无自环)无向连通图数目mod 1004535809(479 * 2 ^ 21 + 1). 输入 仅一行一个整数n(<=130000) 输出 仅一行一个整数, 为 ...
- NTT+多项式求逆+多项式开方(BZOJ3625)
定义多项式$h(x)$的每一项系数$h_i$,为i在c[1]~c[n]中的出现次数. 定义多项式$f(x)$的每一项系数$f_i$,为权值为i的方案数. 通过简单的分析我们可以发现:$f(x)=\fr ...
- BZOJ1042 HAOI2008硬币购物(任意模数NTT+多项式求逆+生成函数/容斥原理+动态规划)
第一眼生成函数.四个等比数列形式的多项式相乘,可以化成四个分式.其中分母部分是固定的,可以多项式求逆预处理出来.而分子部分由于项数很少,询问时2^4算一下贡献就好了.这个思路比较直观.只是常数巨大,以 ...
- 【BZOJ 3456】 3456: 城市规划 (NTT+多项式求逆)
3456: 城市规划 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 658 Solved: 364 Description 刚刚解决完电力网络的问题 ...
- BZOJ 4555 [Tjoi2016&Heoi2016]求和 ——分治 NTT 多项式求逆
不想多说了,看网上的题解吧,我大概说下思路. 首先考察Stirling的意义,然后求出递推式,变成卷积的形式. 然后发现贡献是一定的,我们可以分治+NTT. 也可以直接求逆(我不会啊啊啊啊啊) #in ...
- BZOJ 3456 城市规划 ( NTT + 多项式求逆 )
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3456 题意: 求出\(n\)个点的简单(无重边无自环)无向连通图的个数.(\(n< ...
- [BZOJ3456]城市规划:DP+NTT+多项式求逆
写在前面的话 昨天听吕老板讲课,数数题感觉十分的神仙. 于是,ErkkiErkko这个小蒟蒻也要去学数数题了. 分析 Miskcoo orz 带标号无向连通图计数. \(f(x)\)表示\(x\)个点 ...
- P4233-射命丸文的笔记【NTT,多项式求逆】
正题 题目链接:https://www.luogu.com.cn/problem/P4233 题目大意 随机选择一条有哈密顿回路的\(n\)个点的竞赛图,求选出图的哈密顿回路的期望个数. 对于每个\( ...
- BZOJ 3625 [Codeforces Round #250]小朋友和二叉树 ——NTT 多项式求逆 多项式开根
生成函数又有奇妙的性质. $F(x)=C(x)*F(x)*F(x)+1$ 然后大力解方程,得到一个带根号的式子. 多项式开根有解只与常数项有关. 发现两个解只有一个是成立的. 然后多项式开根.求逆. ...
- luoguP4512 【模板】多项式除法 NTT+多项式求逆+多项式除法
Code: #include<bits/stdc++.h> #define maxn 300000 #define ll long long #define MOD 998244353 # ...
随机推荐
- 机器学习之k-最近邻(kNN)算法
一.kNN(k-nearest neighbor)算法原理 事物都遵循物以类聚的思想,即有相同特性的事物在特征空间分布上会靠得更近,所以kNN的思路是:一个样本在特征空间中k个靠的最近的样本中,大多数 ...
- mongodb 如何删除 字段值为 json对象中的某个字段值
例如: { attributes: { birthday:'1988-01-01', name: 'aq' } } birthday是attributes字段的value的一个字段, 我要删除birt ...
- hwconfig命令详解
基础命令学习目录首页 转载自系统技术非业余研究 本文链接地址: hwconfig查看硬件信息 最近经常要测试新硬件,了解硬件的具体型号和参数就非常重要,过去经常透过lspci, dmidecode, ...
- [redis] 几种redis数据导出导入方式
环境说明: 172.20.0.1 redis源实例 172.20.0.2 redis目标实例 172.20.0.3 任意linux系统 一.redis-dump方式 1.安装redis-dump工具 ...
- linux后退文件夹命令
后退文件夹: cd - 在重复一遍就是前进了
- eclipse在线安装maven插件
http://blog.csdn.net/xiaoxiaoyeyaya/article/details/17200987 在安装插件的时候将下面的contact all update sites du ...
- Week4-作业1:《构建之法》第四章、第十七章 阅读笔记与思考
第四章 两人合作 这一章是讲述了两人结对编程的一些东西,包括一些代码的规范,还有结对编程的优点.怎么做.以及一些注意事项. 1.“错误处理 当程序的主要功能实现后,一些程序员会乐观地估计只需要另外 ...
- ISCC2018(misc)
ISCC2018 misc writeup(部分) 这些天做个了iscc题目,有些题目不是很难,网上都有相同的题或者类似的题目,但是我很菜,没做出来多少. #misc1:Where is the FL ...
- testNg-build.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <proje ...
- yii 验证码 CCaptcha的总结(转)
今天用到yii的验证码 ccaptcha,经过在网上搜寻 找到以下例子: 1.在controller中加入代码 (1)启用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 &l ...