In [5]:
def Birthday(n):
    import numpy as np
    days = []
    r = np.random.rand(n) 
    for i in range(365):
        days.append(False) 
    bd = False
    for i in range(n):
        number = int(364*r[i] + 1) 
        if (days[number]):
            bd = True
            break
        days[number] = True
    return bd
In [6]:
Birthday(200)
Out[6]:
True
In [19]:
def Probably(n, npts):
    sum = 0.0
    for i in range(npts):
        if(Birthday(n)):
            sum = sum + 1.0
    return sum/npts
In [22]:
import numpy as np
for i in np.arange(5,200,5):
    pr = Probably(i,3000)
    print(repr(pr))
0.024333333333333332
0.11566666666666667
0.24766666666666667
0.41433333333333333
0.5483333333333333
0.7236666666666667
0.8273333333333334
0.8916666666666667
0.9473333333333334
0.9716666666666667
0.988
0.9956666666666667
0.997
0.9993333333333333
0.9996666666666667
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
In [ ]: