两个人在充满和的房间里有相同生日的概率为 1-p 。在哪里:
p = 365! / 365^n(365 - n)!
显然,这个数字太大了,无法解决这个问题,那么有什么创造性的方法可以解决这个问题呢?
我已经使用模拟以不同的方式解决了这个问题,但是我发现公式可能更优雅。
最佳答案
您可以利用365!/(365-n)! = 365 * 364 * ... *(365-(n-1))
因此,要计算此项(让它成为A = 365!/(365-n)!),您可以简单地将上面的数字如下所示:
unsinged double A=1; // to make sure there is no overflow
for(int i=0;i<n;i++) A*=365-i;
更进一步:p = A/365 ^ n =(364 * 363 * ... *(365-(n-1)))/365 ^(n-1)= 364/365 * 363/365 * ...(365-(n-1))/365。
所以p可以这样计算:
unsigned double p=1;
for(int i=0;i<n;i++) p*= (365-i)/365.0;
在线性时间内
我认为这应该工作:P
关于计算大数的生日概率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42117846/