关于斯特林数代码片段
  • 板块学术版
  • 楼主Prean
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/8/6 22:35
  • 上次更新2023/11/6 21:04:48
查看原帖
关于斯特林数代码片段
160839
Prean楼主2020/8/6 22:35

第一类斯特林数·行的一个部分是求 (n+c)n(n+c)^{\overline{n}},也就是: i=0nxi1i!i=0ji!ficji(ji)!\sum_{i=0}^nx^i \frac 1 {i!}\sum_{i=0}^ji!f_i\frac {c^{j-i}}{(j-i)!} 可以直接把后面两个卷起来,但是第一篇题解的做法是把 FF 反过来卷积,再返回去,答案应该是一样的啊/yiw

code1(直接卷)

void offset(const int*f,int*g,int c,int n){
    static int b1[M],b2[M];
    int i,p=1,len=1;
    while(len<=(n<<1))len<<=1;
    for(i=0;i<n;++i,p=1ll*p*c%mod){
        b1[i]=1ll*f[i]*fac[i]%mod;
        b2[n-i-1]=1ll*p*ifac[i]%mod;
    }
    for(i=n;i<len;++i)b1[i]=b2[i]=0;
    NTT(b1,1,len);NTT(b2,1,len);
    px(b1,b2,len);NTT(b1,0,len);
    for(i=0;i<n;++i)g[i]=1ll*b1[i]*ifac[i]%mod;
}

code2:(翻转后卷)

void offset(const int*f,int*g,int c,int n){
    static int b1[M],b2[M];
    int i,p=1,len=1;
    while(len<=(n<<1))len<<=1;
    for(i=0;i<n;++i,p=1ll*p*c%mod){
        b1[n-i-1]=1ll*f[i]*fac[i]%mod;
        b2[i]=1ll*p*ifac[i]%mod;
    }
    for(i=n;i<len;++i)b1[i]=b2[i]=0;
    NTT(b1,1,len);NTT(b2,1,len);
    px(b1,b2,len);NTT(b1,0,len);
    for(i=0;i<n;++i)g[i]=1ll*b1[n-i-1]*ifac[i]%mod;
}

然而两份代码输出却不一样。。。

为什么啊/yiw

2020/8/6 22:35
加载中...