解题思路:结合图式求min(C(n, m), 1e18)
如果m > n / 2 则有 m = n - m
计算可得当m大于40的时候C必然大于1e18
所有只用大数暴力求解m较小部分的情况,或者用C++int128边算边约分
ps: py的整数除运算要用// 不然会变为浮点数
mx = 1000000000000000000
def gcd(a,b):
if a%b == 0:
return b
else :
return gcd(b,a%b)
while True:
try:
n, m = map(int, input().split())
if (n - m < m):
m = n - m
if(m > 100):
print(mx)
continue
ra = 1
rb = 1
for i in range(n - m + 1, n + 1):
ra = ra * i
for i in range(1, m + 1):
rb = rb * i
ans = ra // rb
ans = min(ans, mx)
print(ans)
except:
break;