import numpy as np

Poisson = lambda L,k: np.exp(k * np.log(L) - np.sum(np.log(np.arange(1,k+1))) - L)
Binomial = lambda p,n,k: np.exp(np.sum(np.log(np.arange(1, n+1))) - np.sum(np.log(np.arange(1, k+1))) - np.sum(np.log(np.arange(1,n-k+1))) + k*np.log(p) + (n-k)*(np.log1p(-p)))

# 2 年遇到 2 次 50 年一遇暴雨
print(Poisson(2*(1/50),2))
print(Binomial(1/50,2,2))

# 30 年遇到 4 次 50 年一遇暴雨
print(Poisson(30*(1/50),4))
print(Binomial(1/50,30,4))

# 800 年遇到 17 次 1000 年一遇暴雨
print(Poisson(800*(1/1000),17))
print(Binomial(1/1000,800,17))
