爆零求大佬帮助,思路借鉴置顶题解,过了样例
查看原帖
爆零求大佬帮助,思路借鉴置顶题解,过了样例
237437
xxasmcd楼主2024/9/2 22:52
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,p,ifac[1000005],fac[1000005],sum[1000005];
int ksm(int a,int b)
{
    int ans=1;
    while(b)
    {
        if(b%2)ans=ans*a%p;
        a=a*a%p;
        b/=2;
    }
    return ans;
}
void init()
{
    sum[1]=fac[1]=fac[0]=ifac[0]=1;
    for(int i=2;i<=n;i++)
    {
        fac[i]=fac[i-1]*i%p;
        sum[i]=(sum[i-1]+fac[i])%p;
    }
    ifac[n]=ksm(fac[n],p-2);
    for(int i=n-1;i>=0;i--)
    {
        ifac[i]=ifac[i+1]*(i+1)%p;
    }
}
int C(int n,int m)
{
    return fac[n]*ifac[m]%p*ifac[n-m]%p;
}
signed main()
{
     cin>>n>>m>>p;
     if(m==1)
     {
         cout<<n%p;
         return 0;
     }
     init();
     int ans=0;
     for(int j=1;j<=n;j++)
     {
         int k=C(n-j+m-2,m-2);
         ans+=(k*sum[m]%p*j%p);
         ans%=p;
     }
     cout<<ans%p;
}
2024/9/2 22:52
加载中...