传送门

先看做无序的最后乘上 n ! n! n!
显然可以构造生成函数 ∏ ( 1 + i x ) \prod(1+ix) ∏(1+ix)
分治 n t t ntt ntt好像也可以过?不过不知道为啥 R E RE RE了
应该是炸空间了

先取对在 e x p exp exp

= e x p ( ∫ ( ∑ i 1 + i x ) d x ) =exp(\int(\sum{\frac i{1+ix}})\mathrm{dx}) =exp(∫(∑1+ixi​)dx)
e x p exp exp内的
= ∫ ( ∑ i = 1 k ∑ j = 0 ∞ ( − 1 ) j i j x j ) =\int(\sum_{i=1}^k\sum_{j=0}^{\infty}(-1)^ji^jx^j) =∫(i=1∑k​j=0∑∞​(−1)jijxj)
= ∑ i = 1 k ∑ j = 1 ∞ ( − 1 ) j − 1 i j j x j =\sum_{i=1}^k\sum_{j=1}^{\infty}(-1)^{j-1}\frac{i^j}{j}x^j =i=1∑k​j=1∑∞​(−1)j−1jij​xj
= ∑ j = 1 ∞ ( − 1 ) j − 1 j ! x j ∑ i = 1 k i j =\sum_{j=1}^{\infty}\frac{(-1)^{j-1}}{j!}x^j\sum_{i=1}^ki^j =j=1∑∞​j!(−1)j−1​xji=1∑k​ij

后面就是要求等幂和
考虑等幂和的 E G F EGF EGF

∑ i = 1 ∞ ∑ j = 1 k j i x i i ! \sum_{i=1}^{\infty}\sum_{j=1}^k\frac{j^ix^i}{i!} i=1∑∞​j=1∑k​i!jixi​
= ∑ j = 1 k ∑ i = 1 ∞ j i x i i ! =\sum_{j=1}^k\sum_{i=1}^{\infty}\frac{j^ix^i}{i!} =j=1∑k​i=1∑∞​i!jixi​
= ∑ j = 1 k e j x =\sum_{j=1}^ke^{jx} =j=1∑k​ejx
= ∑ j = 0 k e j x − 1 =\sum_{j=0}^ke^{jx}-1 =j=0∑k​ejx−1
= e ( k + 1 ) x − 1 e x − 1 − 1 =\frac{e^{(k+1)x}-1}{e^x-1}-1 =ex−1e(k+1)x−1​−1

复杂度 O ( n l o g n ) O(nlogn) O(nlogn)

#include<bits/stdc++.h>
using namespace std;
#define cs const
#define re register
#define pb push_back
#define pii pair<int,int>
#define ll long long
#define fi first
#define se second
#define bg begin
cs int RLEN=1<<20|1;
inline char gc(){static char ibuf[RLEN],*ib,*ob;(ib==ob)&&(ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));return (ib==ob)?EOF:*ib++;
}
inline int read(){char ch=gc();int res=0;bool f=1;while(!isdigit(ch))f^=ch=='-',ch=gc();while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=gc();return f?res:-res;
}
template<class tp>inline void chemx(tp &a,tp b){a<b?a=b:0;}
template<class tp>inline void chemn(tp &a,tp b){a>b?a=b:0;}
cs int mod=998244353;
inline int add(int a,int b){return (a+=b)>=mod?(a-mod):a;}
inline int dec(int a,int b){a-=b;return a+(a>>31&mod);}
inline int mul(int a,int b){static ll r;r=1ll*a*b;return (r>=mod)?(r%mod):r;}
inline void Add(int &a,int b){(a+=b)>=mod?(a-=mod):0;}
inline void Dec(int &a,int b){a-=b,a+=a>>31&mod;}
inline void Mul(int &a,int b){static ll r;r=1ll*a*b;a=(r>=mod)?(r%mod):r;}
inline int ksm(int a,int b,int res=1){for(;b;b>>=1,Mul(a,a))(b&1)&&(Mul(res,a),1);return res;}
inline int Inv(int x){return ksm(x,mod-2);}
inline int fix(int x){return (x<0)?x+mod:x;}
cs int N=500005;
int fac[N],ifac[N],iv[N];
inline void init_inv(cs int len=N-5){iv[0]=iv[1]=fac[0]=ifac[0]=1;for(int i=1;i<=len;i++)fac[i]=mul(fac[i-1],i);ifac[len]=Inv(fac[len]);for(int i=len-1;i;i--)ifac[i]=mul(ifac[i+1],i+1);for(int i=2;i<=len;i++)iv[i]=mul(mod-mod/i,iv[mod%i]);
}
typedef vector<int> poly;
namespace Poly{cs int G=3,C=21,M=(1<<C)+1;int *w[C+1];int rev[M];inline void init_rev(int lim){for(int i=0;i<lim;i++)rev[i]=(rev[i>>1]>>1)|((i&1)*(lim>>1));}inline void init_w(){for(int i=1;i<=C;i++)w[i]=new int[(1<<(i-1))+1];int wn=ksm(G,(mod-1)/(1<<C));w[C][0]=1;for(int i=1,l=1<<(C-1);i<l;i++)w[C][i]=mul(w[C][i-1],wn);for(int j=C-1;j;j--)for(int i=0;i<(1<<(j-1));i++)w[j][i]=w[j+1][i<<1];}inline void ntt(int *f,int lim,int kd){for(int i=0;i<lim;i++)if(i>rev[i])swap(f[i],f[rev[i]]);for(int mid=1,l=1,a0,a1;mid<lim;mid<<=1,l++)for(int i=0;i<lim;i+=mid<<1)for(int j=0;j<mid;j++)a0=f[i+j],a1=mul(f[i+j+mid],w[l][j]),f[i+j]=add(a0,a1),f[i+j+mid]=dec(a0,a1);if(kd==-1){reverse(f+1,f+lim);for(int i=0,iv=Inv(lim);i<lim;i++)Mul(f[i],iv);}}inline poly operator *(poly a,poly b){int deg=a.size()+b.size()-1;if(deg<=32){poly c(deg,0);for(int i=0;i<a.size();i++)for(int j=0;j<b.size();j++)Add(c[i+j],mul(a[i],b[j]));return c;}int lim=1;while(lim<deg)lim<<=1;init_rev(lim);a.resize(lim),ntt(&a[0],lim,1);b.resize(lim),ntt(&b[0],lim,1);for(int i=0;i<lim;i++)Mul(a[i],b[i]);ntt(&a[0],lim,-1),a.resize(deg);return a;}inline poly Inv(poly a,int deg){poly b(1,::Inv(a[0])),c;for(int lim=4;lim<(deg<<2);lim<<=1){init_rev(lim);c.resize(lim>>1);for(int i=0;i<(lim>>1);i++)c[i]=(i<a.size()?a[i]:0);c.resize(lim),ntt(&c[0],lim,1);b.resize(lim),ntt(&b[0],lim,1);for(int i=0;i<lim;i++)Mul(b[i],dec(2,mul(b[i],c[i])));ntt(&b[0],lim,-1),b.resize(lim>>1);}b.resize(deg);return b;}inline poly deriv(poly a){for(int i=0;i<(int)a.size()-1;i++)a[i]=mul(a[i+1],i+1);a.pop_back();return a;}inline poly integ(poly a){a.pb(0);for(int i=a.size()-1;i;i--)a[i]=mul(a[i-1],iv[i]);a[0]=0;return a;}inline poly Ln(poly a,int deg){a=integ(deriv(a)*Inv(a,deg)),a.resize(deg);return a;}inline poly Exp(poly a,int deg){poly b(1,1),c;for(int lim=2;lim<(deg<<1);lim<<=1){c=Ln(b,lim);for(int i=0;i<lim;i++)c[i]=dec(i<a.size()?a[i]:0,c[i]);Add(c[0],1),b=b*c,b.resize(lim);}b.resize(deg);return b;}
}
using namespace Poly;
int k,m;
poly e,ek,f,g;
int main(){#ifdef Stargazerfreopen("lx.in","r",stdin);#endifk=read(),m=read();init_w(),init_inv();e.resize(m+1),ek.resize(m+1),f.resize(m+1);for(int i=0,mt=k+1;i<=m;i++,Mul(mt,k+1))e[i]=ifac[i+1],ek[i]=mul(ifac[i+1],mt);g=ek*Inv(e,m+1);for(int i=1;i<=m;i++){f[i]=mul(g[i],fac[i-1]);if(!(i&1))f[i]=dec(0,f[i]);}f=Exp(f,m+1);for(int i=1;i<=m;i++)cout<<mul(fac[i],f[i])<<'\n';
}

【洛谷 P5850】 calc加强版(生成函数+NTT)相关推荐

  1. 洛谷.4245.[模板]任意模数NTT(MTT/三模数NTT)

    题目链接 三模数\(NTT\): 就是多模数\(NTT\)最后\(CRT\)一下...下面两篇讲的都挺明白的. https://blog.csdn.net/kscla/article/details/ ...

  2. 洛谷 P4233 射命丸文的笔记 ntt

    题目背景 (七)再见,地底世界的朋友们 在地灵殿住了许多天了呢. 这些日子里,觉分享了很多旧地狱的故事. 此次地底旅行,可以说是非常充实了. 虽然仍旧有些不舍,不过人类总是要见太阳的,再说这样麻烦觉姐 ...

  3. 洛谷 P4463 [集训队互测 2012] calc(拉格朗日插值优化DP)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P4463 Prob ...

  4. 【洛谷4389】付公主的背包(生成函数,多项式运算)

    [洛谷4389]付公主的背包(生成函数,多项式运算) 题面 有一个容量最多为\(10^5\)的背包 有\(n\)种物品,数量无限,题解是\(v_i\) 给定一个\(m\),求所有\(s\in[1,m] ...

  5. 洛谷P5488 | FFT+生成函数+二项式定理

    前言 因为最近在学习生成函数和多项式有关的内容,很多这方面的东西也不是很懂,所以很多地方可能讲得不好或者是不清楚还请读者们见谅. 那么关于这道题呢,它是我前段时间刚学生成函数时见过的题目.当时由于是刚 ...

  6. 洛谷 P4245 【模板】任意模数NTT

    洛谷 P4245 [模板]任意模数NTT 贴个板子,4次DFT. Code #include<cstdio> #include<algorithm> #include<c ...

  7. python高精度乘法_洛谷P1919--A*B Problem升级版(NTT优化高精度乘法)

    题目背景 本题数据已加强,请使用 FFT/NTT,不要再交 Python 代码浪费评测资源. 题目描述 给你两个正整数 a,b,求$ a \times b$. 输入格式 第一行一个正整数,表示 a: ...

  8. #莫比乌斯反演#BZOJ 2671 洛谷 4466 和与积 Calc

    题目 求有多少对(a,b)(a,b)(a,b)满足1≤a<b≤n1\leq a<b\leq n1≤a<b≤n且a+b∣aba+b|aba+b∣ab 分析 若gcd(a,b)=1gcd ...

  9. 洛谷P4233 射命丸文的笔记 【多项式求逆】

    题目链接 洛谷P4233 题解 我们只需求出总的哈密顿回路个数和总的强联通竞赛图个数 对于每条哈密顿回路,我们统计其贡献 一条哈密顿回路就是一个圆排列,有\(\frac{n!}{n}\)种,剩余边随便 ...

最新文章

  1. Netkiller Architect 手札之前言
  2. 大约xib连接错误bug正确
  3. 命令行模式下的后向引用替换
  4. 剑指offer:22-25记录
  5. 目前最细致清晰的NSDictionary以及NSMutableDictionary用法总结(转)
  6. yolov5模型部署:Nvidia使用TensorRT部署yolov5s模型
  7. UE4 Linux交叉编译Clang下载
  8. XP 远程连接window 2008 网络级别身份验证问题解决方法
  9. android netd firewall 分析,第2章 深入理解Netd
  10. 信阳市的计算机本科学校,郭华平 - 信阳师范学院 - 计算机与信息技术学院
  11. Duckduckgo搜索引擎
  12. SpringBoot企业微信点餐系统
  13. java微信小程序支付-回调(Jsapi-APIv3)
  14. sql—labs通关
  15. 从零搭建hyperf docker镜像
  16. soul 总是显示登录聊天服务器,用soul聊天莫名其妙被封了号,并没有发广告就被封...
  17. 台资企业管理职的中英文称谓以及级别
  18. 虹科 | 主机总线适配器:CPU的“速效救心丸”
  19. matlab abs 矩阵,matlab abs造句
  20. facebook app

热门文章

  1. Linux-引导过程与服务控制
  2. mybatis 的trim标签的使用,属性prefix,suffix,prefixOverrides,suffixOverrides
  3. android关闭传感器,您如何在安卓10手机上打开和关闭传感器
  4. Pspice仿真实验 例B-1
  5. shell - 在文本中的前一行或后一行添加一行内容,指定行前后增加一行内容
  6. 地方征信平台第2讲:河北省征信
  7. 理想汽车确认首席技术官王凯离职
  8. WPF自定义控件与样式(13)-自定义窗体Window 自适应内容大小消息框MessageBox
  9. 个人如何打破部门墙_做事要有霸气
  10. 清华教授:多年以来,我对我的学生都不太满意