背景
在生日悖论是概率论这颠覆流行的问题(大多数人)的数学直觉。问题陈述是:
给定N个人,他们中至少有两个生日相同(不考虑年份)的概率是多少?
通常通过完全忽略leap日来简化此问题。在这种情况下,N = 23的答案是P(23)≈0.5072972(作为常见示例)。链接的维基百科文章解释了如何得出这种可能性。另外,此Numberphile视频也做得很好。
但是,对于这个挑战,我们想做正确的事,不要忽略leap年。这有点复杂,因为现在需要添加2月29日,但是这个特定的生日比其他所有生日都少。
我们还将使用完整的leap年规则:
- 如果一年可被400整除,则表示a年。
- 否则,如果一年可被100整除,则不是a年。
- 否则,如果将一年除以4,则表示a年。
- 否则,这不是a年。
困惑?这意味着1700、1800、1900、2100、2200、2300年不是leap年,而是1600、2000、2400年(以及其他任何可以除以4的年份)。该日历每400年重复一次,我们将假设这400年中的生日统一分配。
现在N = 23的校正结果为P(23)≈0.5068761。
挑战
给定一个整数1 ≤ N < 100
,请N
考虑the年规则,确定至少两个人中有相同生日的概率。结果应该是浮点数或定点数,至少精确到小数点后6位。截断尾随零是可以接受的。
您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行自变量或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。
您的解决方案必须能够在几秒钟内产生所有99个输入的输出。这主要是为了排除使用大量样本的蒙特卡洛方法,因此,如果您以过于缓慢的深奥语言使用主要是快速且精确的算法,那么我愿意在这条规则上留有余地。
测试用例
这是完整的结果表:
1 => 0.000000
2 => 0.002737
3 => 0.008195
4 => 0.016337
5 => 0.027104
6 => 0.040416
7 => 0.056171
8 => 0.074251
9 => 0.094518
10 => 0.116818
11 => 0.140987
12 => 0.166844
13 => 0.194203
14 => 0.222869
15 => 0.252642
16 => 0.283319
17 => 0.314698
18 => 0.346578
19 => 0.378764
20 => 0.411063
21 => 0.443296
22 => 0.475287
23 => 0.506876
24 => 0.537913
25 => 0.568260
26 => 0.597796
27 => 0.626412
28 => 0.654014
29 => 0.680524
30 => 0.705877
31 => 0.730022
32 => 0.752924
33 => 0.774560
34 => 0.794917
35 => 0.813998
36 => 0.831812
37 => 0.848381
38 => 0.863732
39 => 0.877901
40 => 0.890932
41 => 0.902870
42 => 0.913767
43 => 0.923678
44 => 0.932658
45 => 0.940766
46 => 0.948060
47 => 0.954598
48 => 0.960437
49 => 0.965634
50 => 0.970242
51 => 0.974313
52 => 0.977898
53 => 0.981043
54 => 0.983792
55 => 0.986187
56 => 0.988266
57 => 0.990064
58 => 0.991614
59 => 0.992945
60 => 0.994084
61 => 0.995055
62 => 0.995880
63 => 0.996579
64 => 0.997169
65 => 0.997665
66 => 0.998080
67 => 0.998427
68 => 0.998715
69 => 0.998954
70 => 0.999152
71 => 0.999314
72 => 0.999447
73 => 0.999556
74 => 0.999645
75 => 0.999717
76 => 0.999775
77 => 0.999822
78 => 0.999859
79 => 0.999889
80 => 0.999913
81 => 0.999932
82 => 0.999947
83 => 0.999959
84 => 0.999968
85 => 0.999976
86 => 0.999981
87 => 0.999986
88 => 0.999989
89 => 0.999992
90 => 0.999994
91 => 0.999995
92 => 0.999996
93 => 0.999997
94 => 0.999998
95 => 0.999999
96 => 0.999999
97 => 0.999999
98 => 0.999999
99 => 1.000000
(当然,由于四舍五入关系,P(99)仅为1.0。直到P(367),概率才精确到1.0。)