全WA 求助
查看原帖
全WA 求助
817825
linminmohan楼主2024/11/8 17:08

不知道错哪了qwq

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define il inline

const int maxn = 1e5+5;
ll f[maxn], g[maxn];

il ll read()
{
	ll num=0; int f=1;
	char c=getchar();
	while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
	while(c>='0'&&c<='9') {num=(num<<3)+(num<<1)+(c^48);c=getchar();}
	return num*f;
}

ll pok(ll a,int b,int p)
{
  ll res = 1;
  while(b)
  {
    if(b & 1) res=res*a%p;
    a=a*a%p;
    b>>=1;
  }
  return res;
}

il void init(int p)
{
  f[0]=g[0]=1;
  for(int i=1;i<=p;i++)
  {
    f[i]=f[i-1]*i%p;
    g[i]=g[i-1]*pok(i,p-2,p)%p;
  }   
}

il ll getC(int n, int m, int p)
{
  return f[n]*g[m]*g[n-m]%p;
}

il int lucas(ll n,ll m,int p)
{
  if(!m) return 1;
  return lucas(n/p,m/p,p)*getC(n%p,m%p,p)%p;
}

int main()
{
  int t, n, m, p;
  t=read();
  while(t--)
  {
    n=read();m=read();p=read();
    init(p);
    printf("%d\n",lucas(n+m,n,p));
  }
  return 0;
}
2024/11/8 17:08
加载中...