M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。
收起
输入
第1行,2个数M,N,中间用空格隔开。(2 <= m,n <= 1000000)
输出
输出走法的数量 Mod 10^9 + 7。
输入样例
2 3
输出样例
3
#include<stdio.h>
#define mod 1000000007
long long jiecheng(int x)
{
long long w=1,i;
for(i=1;i<=x;i++)
{
w=w*i%mod;
}
return w;
}
long long quickpow(long long a, int b)
{
if(b<0) return 0;
long long ret =1;
while(b)
{
if(b&1)
ret=ret*a%mod;
b>>=1;
a=(a*a)%mod;
}
return ret;
}
int main()
{
int n,m;
scanf("%d%d",&m,&n);
long long a,b,c,d,e;
a=jiecheng(m+n-2);
b=jiecheng(m-1);
d=jiecheng(n-1);
c=quickpow(b,mod-2);
e=quickpow(d,mod-2);
long long num=(a*c%mod)*e%mod;//这个注意求解逆元c(n-1)和c(m-1)不能在一块算之后求乘积,要一步一步的除 ,求逆元
printf("%lld\n",num);
return 0;
}