大學剛畢業,你辦了一場盛大的派對,和朋友、家人一起慶祝。來了超過 70 個人,其中包括有點古怪的泰德叔叔。
他又照慣例搞怪,跟你打賭 100 英鎊,說在場至少會有兩個人的生日是同一天。這聽起來太荒謬了:可能的生日遠比賓客的人數多,於是你自信滿滿地答應了。
令你大吃一驚的是,才問了 32 位賓客的生日,你就已經找到兩個生日相同的賓客。你認賠,把 100 英鎊交給泰德叔叔,但總覺得哪裡怪怪的。
隔天,好奇心還是戰勝了你。上網快速一查,你找到了生日悖論,這才發現只要 23 個人,有兩個人同一天生日的機率就超過 50%。
啊。原來_這_就是泰德叔叔這麼有把握的原因。
你下定決心要扳回一城,開始研究其他悖論;下一次,就換_你_來當那個跟別人打賭的人了。
生日悖論是一種真實悖論:即使感覺不對,實際上卻是真的。
你的任務是估計生日悖論的機率。
為此,你需要:
出生日期包含完整的出生年月日(年、月、日),而生日只指月和日,它們每年都會重複。 兩個出生日期若有相同的月和日,就對應到相同的生日。
生日悖論假設:
你的實作必須遵循這些假設。
函式random_birthdates()產生的日期應該符合以下性質:
y是非閏年,而且符合1600 <= y < 2129。年份與生日兩者的分布都會以卡方檢定檢查,顯著水準為 p < 0.0001。
這代表如果日期是依照指示產生,那麼產生出來的數值分布未能通過檢定的機率不到 0.01%。