参考的一篇很棒的文章 参考的另一篇很棒的文章 一个很棒的pdf
一、分解质因数
分解质因数的话,先想到的就是试除。然而Pollard_Rho这个方法很奇妙。
先想象一个算法:在 [ 2 , N − 1 ] [2,N-1] [2,N−1]生成一个随机数,判断一下这个数是不是N的因数。
这里先假设 N = p ∗ q N=p*q N=p∗q( p p p、 q q q都是质数)。
那么找到这两个数之一的概率就是 2 N − 1 \frac{2}{N-1} N−12对吧。当N很大的时候,这个概率就极小了。
二、生日悖论
考虑一下如何增加这个概率呢?这里引入一个生日悖论——
在一个房间里,如果有 23 23 23个或者 23 23 23个以上的人,那么至少存在两个人生日相同的概率超过 50 50% 50!
听起来感觉似乎不可思议,那来理论分析一下吧。
考虑一下不存在两个人生日相同的概率——大家的生日都不相同。
(这里假设一年有 365 365 365天)
一个人:他的生日有 365 365 365种选择,概率为 365 365 = 1 \frac{365}{365}=1 365365=1。
两个人:第二个人的生日不能选择第一个人的生日,有 364 364 364种选择。
概率为 365 365 × 364 365 ≈ 0.99726 \frac{365}{365}\times\frac{364}{365}\approx0.99726 365365×365364≈0.99726
三个人:第三个人的生日不能选择前两个人的生日,有 363 363 363种选择。
概率为 365 365 × 364 365 × 363 365 ≈ 0.99179 \frac{365}{365}\times\frac{364}{365}\times\frac{363}{365}\approx0.99179 365365×365364×365363≈0.99179
以此类推
n n n个人(n<365): 365 365 × 364 365 × . . . × 365 − n + 1 365 \frac{365}{365}\times\frac{364}{365}\times...\times\frac{365-n+1}{365} 365365×365364×...×365365−n+1
若n大于365,那么必定存在两个人的生日相同。
当 n = 23 n=23 n=23时,那么所有人生日不相同的概率大约为 0.492703 0.492703 0.492703
当 n = 100 n=100 n=100时,通过计算器得出,所有人生日不相同的概率约为 0.000000307249 0.000000307249 0.000000307249
那么对应生日相同的概率:
n = 1 : 1 − 1 = 0 n=1:1-1=0 n=1:1−1=0
n = 2 : 1 − 0.99726 = 0.00274 n=2:1-0.99726=0.00274 n=2:1−0.99726=0.00274
n = 3 : 1 − 0.99179 = 0.00821 n=3:1-0.99179=0.00821 n=3:1−0.99179=0.00821
…
n = 23 : 1 − 0.492703 = 0.507297 n=23:1-0.492703=0.507297 n=23:1−0.492703=0.507297,大约为 50 % 50\% 50%。
n = 100 : 1 − 0.000000307249 = 0.999999692751 n=100:1-0.000000307249=0.999999692751 n=