一个屋子里人数必须要达到多少人,才能使其中两人生日相同的机会达到50%?
没看书上的解前,自己先算了下
不考虑闰年,并假设每人生日均匀随机分布,即生日落在某天的概率均为1/365
设有n人,考虑所有情况数量为 365^n,每人生日均不同的情况相当于从365中选出n进行排列,1减去两者比值即为两人生日相同的概率。实现如下:
from math import factorial # 阶乘函数
def run(n):
all_state = 365**n
non_state = factorial(365) / factorial(365 - n)
return 100 - 100 * non_state / all_state
if __name__ == '__main__':
run(10) # 11.69
run(20) # 41.14
run(22) # 47.57
run(23) # 50.73
run(50) # 97.04
run(70) # 99.92
run(121) # OverflowError: int too large to convert to float
因此,23人中两人生日相同概率即达到50%