题目链接
http://www.lydsy.com/JudgeOnline/problem.php?id=1856
思路
代码
扩欧写错了调了半天才发现,开小了阶乘数组RE一发,我是傻叉。。。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#define MOD 20100403
using namespace std;
typedef long long int LL;
LL fact[3100000];
LL extGCD(LL a,LL b,LL &x,LL &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
LL gcd=extGCD(b,a%b,x,y);
LL t=x;
x=y;
y=t-(a/b)*y;
return gcd;
}
LL rev(LL a,LL b) //求a在mod b意义下的逆元
{
LL x, y;
extGCD(a,b,x,y);
return (x+b)%b;
}
LL C(LL n,LL m)
{
return (fact[n]*rev(fact[n-m],MOD)%MOD)*rev(fact[m],MOD)%MOD;
}
int main()
{
LL n,m;
scanf("%lld%lld",&n,&m);
fact[1]=1;
for(LL i=2;i<3100000;i++) fact[i]=(fact[i-1]*i)%MOD;
printf("%lld\n",((C(n+m,n)-C(n+m,m-1))%MOD+MOD)%MOD);
return 0;
}