写的时候有个地方忘取模调了半天【流汗】
先和子集卷积一样处理出 size 那一维,先对集合幂级数那一维 fmt,然后在形式幂级数那一维作 的暴力 ln, exp。
写的时候遇到的坑点是集合幂级数那一维的范围其实是 而不是 。
void fmt(int *f,int n,int op){
for(int i=0;i<n;i++){
if(op==1){
for(int j=0;j<bit(n);j++)
if(j&bit(i))
cadd(f[j],f[j-bit(i)]);
}
else{
for(int j=bit(n)-1;j>=0;j--)
if(j&bit(i)){
cdel(f[j],f[j-bit(i)]);
}
}
}
}
void fmtln(int *f,int n){
static int a[16][(1<<15)+10];
for(int i=0;i<=n;i++)for(int j=0;j<bit(n);j++)a[i][j]=0;
for(int i=0;i<bit(n);i++)a[__builtin_popcount(i)][i]=f[i];
for(int i=0;i<=n;i++)fmt(a[i],n,1);
for(int S=0;S<bit(n);S++){
static int b[16];
for(int i=0;i<n;i++){
int s=1ll*(i+1)*a[i+1][S]%mod;
for(int j=1;j<=i;j++)cdel(s,1ll*a[j][S]*b[i-j]%mod);
b[i]=s;
}
for(int i=1;i<=n;i++)a[i][S]=1ll*b[i-1]*iv[i]%mod;
}
for(int i=0;i<=n;i++)fmt(a[i],n,-1);
for(int i=0;i<bit(n);i++)f[i]=a[__builtin_popcount(i)][i];
}
void fmtexp(int *f,int n){
static int a[16][(1<<15)+10];
for(int i=0;i<=n;i++)for(int j=0;j<bit(n);j++)a[i][j]=0;
for(int i=0;i<bit(n);i++)a[__builtin_popcount(i)][i]=f[i];
for(int i=0;i<=n;i++)fmt(a[i],n,1);
for(int S=0;S<bit(n);S++){
static int b[16];
for(int i=0;i<=n;i++){
int s=0;
if(i<n)s=1ll*(i+1)*a[i+1][S]%mod;
for(int j=1;j<=i;j++)cadd(s,1ll*a[i-j+1][S]*(i-j+1)%mod*b[j-1]%mod*iv[j]%mod);
b[i]=s;
}
for(int i=1;i<=n;i++)a[i][S]=1ll*b[i-1]*iv[i]%mod;
}
for(int i=0;i<=n;i++)fmt(a[i],n,-1);
for(int i=0;i<bit(n);i++)f[i]=a[__builtin_popcount(i)][i];
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?