#!/usr/bin/env python3
# file: serindipity.py

import math

def main():
    n = 17000 # number of people at Stanford
    f = 80 # number of friends
    r = 450 # number of people in the room

    print(f"Equally likely calculation: {equally_likely_soln(n, f, r):.5}")
    print(f"Counting calculation: {counting_soln(n, f, r):.5}")
    print(f"Counting calculation approx: {counting_soln_approx(n, f, r):.5}")

def counting_soln(n, f, r):
    prod = 1
    for i in range(r):
        prod *= (n - f - i) / (n - i)
    return 1 - prod

def counting_soln_approx(n, f, r):
    return 1 - ((n - f) / n) ** r

def equally_likely_soln(n, f, r):
    return 1 - math.comb(n - f, r) / math.comb(n, r)

if __name__=='__main__':
    main()
