Guest User

Untitled

a guest
Sep 26th, 2020
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.71 KB | None | 0 0
  1. #!/usr/bin/python3
  2.  
  3. # https://math.stackexchange.com/a/943050/185635
  4.  
  5. from operator import mul
  6. from functools import reduce
  7. from math import isclose
  8.  
  9. def choose(n, k):
  10. if k + k > n: k = n - k
  11. numer = reduce(mul, range(n, n - k, -1), 1)
  12. denom = reduce(mul, range(1, k + 1), 1)
  13. return numer // denom
  14.  
  15. def sum1(n, m, p):
  16. f = lambda k: choose(k - 1, n - 1) * (1 - p)**k
  17. return (p / (1 - p))**n * sum(f(k) for k in range(n, n + m))
  18.  
  19. def sum2(n, m, p):
  20. f = lambda k: choose(n + m - 1, k) * (p / (1 - p))**k
  21. return (1 - p)**(n + m - 1) * sum(f(k) for k in range(n, n + m))
  22.  
  23. def same(n, m, p):
  24. return isclose(sum1(n, m, p), sum2(n, m, p))
  25.  
  26. assert(same(5, 8, 0.2))
  27. assert(same(19, 12, 0.8))
  28.  
Add Comment
Please, Sign In to add comment