ans=sum( C(n-2,i) * C(m-2,i) )
然后求下逆元就好了。
#include<bits/stdc++.h>
using namespace std;
const long long mod=1e9+7;
const int MAXN=100100;
long long fac[MAXN],inv[MAXN];
long long powmod(long long x,long long p)
{
long long ret=1;
while(p)
{
if(p&1)
ret=ret*x%mod;
x=x*x%mod;
p>>=1;
}
return ret;
}
long long C(long long n,long long m)
{
if(m>n)
return 0;
return fac[n]*inv[n-m]%mod*inv[m]%mod;
}
int main()
{
long long n,m,i,ans;
fac[0]=inv[0]=1;
for(i=1;i<MAXN;i++)
{
fac[i]=i*fac[i-1]%mod;
inv[i]=powmod(fac[i],mod-2);
}
while(~scanf("%lld%lld",&n,&m))
{
ans=0;
for(i=0;i<=min(n,m)-2;i++)
ans=(ans+C(n-2,i)*C(m-2,i)%mod)%mod;
printf("%lld\n",ans);
}
}