解題思路:結合圖式求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;