版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42369449/article/details/83105513
模板:
#include<iostream>
#include<algorithm>
#include<cstdio>
#define ll long long
#define N 100005
using namespace std;
int k,n,m,p;
ll inv[N],jc[N];
void ny()
{
inv[0]=1;
inv[1]=1;
for(int i = 2;i <= p;i++)
{
inv[i]=(p-p/i)*inv[p%i]%p;
}
}
ll lucas(int x,int y)
{
if(x<y) return 0;
else if(x<p) return jc[x]*inv[y]*inv[x-y]%p;
else return lucas(x/p,y/p)*lucas(x%p,y%p)%p;
}
int main()
{
scanf("%d%d%d",&n,&m,&p);
ny();
jc[0]=jc[1]=1;
for(int i = 2;i <= p;i++) jc[i]=jc[i-1]*i%p;
for(int i = 2;i <= p;i++) inv[i]=inv[i-1]*inv[i]%p;
printf("%I64d\n",lucas(n,m));
return 0;
}