《不可思议的数》第23章“生日悖论”:

在一场英式足球赛里,通常会有23个人在赛场上:两支参赛队伍各有11名球员,外加1名裁判。…… 在这23人里,2人或2人以上具有相同生日的概率是多少?

……

现在,规律很清楚了。当第 k 个人上场时,所有 k 个人生日不相同的概率是

当 k= 23 时,它的结果等于 0.492703,比 1/2 略小。因此,至少有两个人生日相同的概率是 1 - 0.492703,它等于 0.507297,比 1/2 略大。

……

木星上的生日

我们算出 23,是因为一年里有 365 天。在这里 365 并没有特殊的数学意义,它源自天文学上的规定。就数学而言,我们应该分析一个更一般化的问题,这在个问题里,一年的天数应该是任意的。

让我们先算算泡泡猴的生日问题。…… 所以,一个“木星年”大约包含了 10 477 个“木星日”。

类似计算表明,假设有 121 只泡泡猴(每队 40 只,一共 3 个队,再加上 1 名裁判)参与球赛时,至少有 2 只泡泡猴生日相同的概率会略大于 1/2。事实上,

而当有 120 只泡泡猴时,生日相同的概率是 0.495455。

注意,上面的公式中连乘积最后一项的分子 10356 应该是 10357,因为它应该等于 10477 - k + 1 = 10477 - 121 + 1 = 10357。

我们可以写一个函数 f(n,k) 来计算当一年有 n 天,k 个人中至少有 2 个人的生日相同概率。在 PARI/GP 中可以这么写:

$ gp -q
? f(n,k)=1.0-prod(i=1,k-1,(n-i)/n)
? f(365,23)
0.50729723432398540722541722833703250024
? f(10477,121)
0.50123411013126407848664452412022799823
? f(10477,120)
0.49545522562955042486285359459376544728

计算结果和书上给出的相符。书上继续说:

当一年的天数不同时,木星上的数学家们实在不想重复计算这一概率,于是,他们发展出一个通用公式。这个公式并不十分精确,却是一个非常好的近似。它回答了一个一般化的问题:如果可以选取 n 个日期,必须要有多少实体,才能使其中至少两个实体具有相同生日的概率超过 1/2?

但木星生物不知道,从尼波布拉科特(Neeblebruct)星球来的一支隐形外星入侵者舰队已经绕着木星转悠了半个木星世纪。为了解开一个秘密,他们经年累月地绑架了尼波布拉科特组(一组等于 42 个)木星数学家。外星入侵者碰到的问题是:一个尼波布拉科特年恰好有 424 = 3 111 696 尼波布拉科特天,但是没人能算出 121 该被哪个数替代才是正确的。

接下来,书上给出了一个近似公式来解决这个问题。

……(欲知这个公式是什么,请购买《不可思议的数》)
然而,当 n 很大时,这个公式就不那么精确了。当把它应用到尼波布拉科特年,即 n = 3 111 696 时,根据公式可知
k = 2076.95
(向上)取整后得到 2077。但通过详细计算,这时
P(k) = 0.4999
它比 1/2 略小。正确的结果应该是 2078,因为这样才会有
P(k) = 0.5002

注意,这里的 0.5002 应该是 0.5003,见后面的计算。还要注意,这里(书上第314页)的 P(k) 表示 k 个人中至少有两个人具有相同生日的概率,而本文开头(书上第311页)的 P(k) 表示所有 k 个人生日都不相同的概率。如果把前者称为 P2(k),后者称为 P1(k),则:P2(k) = 1 - P1(k)。

利用 PARI/GP,写出一个函数 g(n) 来准确计算需要多少个实体才能满足要求是非常简单的:

? g(n)=z=1;k=0;for(i=1,n,if(z<=1/2,k=i;break);z*=(n-i)/n);k
? g(365)
23
? g(10477)
121
? g(42^4)
2078

这个结果与书上给出的相符。继续验证书上的最后两个 P(k):

? f(42^4,2077)
0.49992646809781378219275113896957663584
? f(42^4,2078)
0.50026025800716252344973307290025630034

可见书上最后一个 P(k) 有误。