我有一段代码检查给定的数字是否是素数:

If x Mod 2 = 0 Then
    Return False
End If
For i = 3 To x / 2 + 1 Step 2
    If x Mod i = 0 Then
        Return False
    End If
Next
Return True

我只把它用在数字上。然而,它是非常缓慢的-我几乎不能检查300个数字每秒,所以检查所有的1E7 <= x <= 2E7,将需要超过23天…
有人能给我一些改进的建议吗?或者说我可能会用这种方式做些多余的事情吗?

最佳答案

你一定要改变你的算法!您可以尝试Sieve of Eratosthenes或更高级的Fermat primality test。请注意,您的代码将更加复杂,因为您需要实现模块化算法。查看here一些更先进的数学方法的列表。

09-30 13:58
查看更多