将一个大数\(N\)分解质因子。
试除法,暴力枚举\(1~\sqrt{N}\)的数。时间复杂度:\(O(\sqrt{N})\)。
通常,这个复杂度够了,但有时,\(N\leq10^18\)。
考虑一种糟糕的做法:随机法。随机一个\(1~\sqrt{N}\)的数,判断能否整除。期望需要\(\sqrt{N}\)次。
考虑用“生日悖论”优化。
生日悖论,指如果一个房间里有23个或23个以上的人,那么至少有两个人的生日相同的概率要大于50%。这就意味着在一个典型的标准小学班级(30人)中,存在两人生日相同的可能性更高。对于60或者更多的人,这种概率要大于99%。
首先,考虑一种简单情况。设\(N=p*q(p<q)\)。
我们发现,随机的数x并不一定要等于p,只要是p的倍数即可,即\(gcd(N,x)=p\)。
然而,这样每次的概率仍只有\(1/\sqrt{N}\)。