python数学小实验(4)——班里同学有生日相同的概率

同一个班级有生日相同的概率。

一个班级有25个同学,有生日在同一天的概率是多少?

代码:

import numpy as np 
from numpy import random

NUM_STUDENT = 25
NUM_EXER = 10000
count=0

for i in range(NUM_EXER):
    birtdays = []
    for j in range(NUM_STUDENT):
        birtdays.append(np.random.randint(356))
    if len(set(birtdays)) < NUM_STUDENT:
        count +=1

print(count/NUM_EXER)

用python重复10000次试验,概率为57.6%。只要有25位同学,就有超过一半的可能性有可能生日在同一天。

直接计算:

计算不出现相同生日的概率:
p = ( 365 n + 1 ) ! 36 5 n ( 365 n ) ! p=\frac{(365-n+1)!}{365^n*(365-n)!}
出现相同生日的概率是: 1 p 1-p

当n=25,利用python计算:

def factorial(n):
    a = 1
    for i in range(1, n+1):
        a = a*i
    return a

k = 1 - factorial(365)/(factorial(365-NUM_STUDENT)*365**NUM_STUDENT)
print(k)

输出56.8%
多次试验都有一定误差,也许是python计算四舍五入?还是哪里出错了?

后记

为什么会出现这样的情况?
类似 0.9 9 n 0.99^n ,当 n = 25 n=25 时,得到0.78。原理类似。

猜你喜欢

转载自blog.csdn.net/houhuipeng/article/details/91435595
今日推荐