Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python3
- # https://math.stackexchange.com/a/943050/185635
- from operator import mul
- from functools import reduce
- from math import isclose
- def choose(n, k):
- if k + k > n: k = n - k
- numer = reduce(mul, range(n, n - k, -1), 1)
- denom = reduce(mul, range(1, k + 1), 1)
- return numer // denom
- def sum1(n, m, p):
- f = lambda k: choose(k - 1, n - 1) * (1 - p)**k
- return (p / (1 - p))**n * sum(f(k) for k in range(n, n + m))
- def sum2(n, m, p):
- f = lambda k: choose(n + m - 1, k) * (p / (1 - p))**k
- return (1 - p)**(n + m - 1) * sum(f(k) for k in range(n, n + m))
- def same(n, m, p):
- return isclose(sum1(n, m, p), sum2(n, m, p))
- assert(same(5, 8, 0.2))
- assert(same(19, 12, 0.8))
Add Comment
Please, Sign In to add comment