生日也会有问题,人生如此艰难。
问题描述: 在一个教室中最少应有多少学生才使得至少有两个学生的生日在同一天的概率不小于1/2?
直觉回答这应该是个三位数的答案,对吧!
然而答案是23!!!!
第一次遇到这个问题是高中看一个不知道什么知识点(反正和高考没关系),当时只是看懂了,却不知道有什么用。
比较好的实践方法就是像我的概率论习题课老师(如果没记错,是个女的吧)喊一堆人上去写自己的生日,直到有两个人的生日相同。大概当时是20几个吧,忘了。(也可能这事就是我瞎编的)
分析问题:366天这种情况不考虑,只考虑平年365天。求:至少有两个学生的生日在同一天的概率?也就是算1-P(大家生日都不相同)。
1个人的时候:可以选择:365/365
2个人的时候:可以选择:364/365
3个人的时候:可以选择:363/365
…
…
n个人的时候:可以选择:(365-n+1)/365
P(n人生日各不同)=365*364*363…*(365-n+1)/365^n
P(至少有两个学生的生日在同一天的概率)=1-P(n人生日各不同)
又到了撸代码的时候:
#include <iostream>
using namespace std;
int main()
{
double P(int n);
int n;
int i;
for(i = 1; i < 100; i += 3)
{
cout<<i<<"个人中至少有两个人生日相同的概率为:"<<1-P(i)<<endl;
}
return 0;
}
double P(int n)
{
double p = 1.0;
int i;
for(i = 1; i <= n; i++)
{
p *= (365-i+1)/365.0;
}
return p;
}
结果:
为了找到23,把for语句改一下就好了
又关注了一下99%在哪
大概57个人就能到了
认识那多人,现在就知道一个学妹生日比我早一天,哦,她还和我同一年。还有两位长春生日比我早一天。
相关:生日攻击 平方根攻击
随手百度:http://blog.csdn.net/px_farmer/article/details/52688806
百度百科:http://baike.baidu.com/link?url=mckUhyZa56BwvVvb2lP-UpCX6_DOLyE-tICCUjWN8NY5wIglTZ3lQ1fCU3VBXmEwq9mvTFOn7KwMkrbJ181FwIiF1GJy5BnZrBYkv04p9cYAiPfWJD4UzMRGFuVH2Ks9
简单地说:生日攻击对Hash函数提出了一个必要的安全条件,即消息摘要必须足够长。40比特长的消息摘要,大概用2^20(大约100百万)次随机Hash可至少以1/2的概率找到一个碰撞。推荐160比特长的消息摘要。
CSDN博客不能改名,要不我想改成 菜狗子
然后就是菜狗子的博客