【发布时间】:2020-11-21 07:51:37
【问题描述】:
我知道的最好的方法是 sqrt(n)。我读到了费马的素性检验和米勒-拉宾素性检验。它们在 O(log(n)) 时间内运行,但一个主要缺点是它们有时也会失败。 你能帮帮我吗?
如果可能的话,在python中提供算法和代码(即使算法就足够了)。
【问题讨论】:
-
在实践中通常不用担心故障率。在 k 轮之后,Miller-Rabin 误报的几率是 1 in 4^(-k)。即使对于
k的小值,例如 20,对于n的大值,sqrt(n) 和 k*log(n) 之间也存在显着差异,在这种情况下,您需要比简单除数测试更快的东西,而 Miller - 在这种情况下,Rabin 将在 99.9999999999% 的时间报告一个复合数字。 -
而 4^(-k) 是一个保守的估计;对于大的
n,速率下降到 8^(-k) 甚至更低。
标签: python algorithm time-complexity primes number-theory