擅长:python、mysql、java
<p>素性测试是一个非常棘手的话题。</p>
<p>在尝试加速代码之前,请确保它按预期工作。
我建议你从非常简单的算法开始,然后从那里开始构建。</p>
<p>值得关注的是,isPrime2有缺陷。它返回6,10,12。。。</p>
<p>第3行到第6行很有说服力</p>
<pre><code>while d*d <= number:
while (number % d) == 0:
number //= d
d += 1
</code></pre>
<p>当找到因子<code>number</code>d时,number将更新为<code>number = number // d</code>,并且在while循环的末尾,如果number>;1返回<code>True</code></p>
<p>使用<code>number = 6</code>处理代码:</p>
<pre><code>isPrime2(6)
initialise> number := 6
initialise> d := 2
line3> check (2 * 2 < 6) :True
line4> check (6 % 2 == 0) :True
line5> update (number := 6//2) -> number = 3
line6> update (d : d + 1) -> d = 3
jump to line3
line3> check (3 * 3 < 3) :False -> GOTO line7
line7> check(number > 1) -> check(3 > 1) :True
line8> return True -> 6 is prime
</code></pre>