<p>我看到了这段代码的低效和问题。首先,它测试从1到<code>x</code>的除数是低效的</p>
<pre><code>for deler in range(1, x):
</code></pre>
<p>当它只需要测试从3到^{<cd1>的<em>平方根</em>的<em>奇数</em>除数(处理偶数后)。但是,即使这样做也是低效的,因为它正在创建一个素数列表,它可以用它作为除数来加快速度!最后,就效率而言,我相信这可以一次完成:</p>
<pre><code>TARGET = 10_000 # below this number
primes = [2]
start = end = primes[-1]
for number in range(3, TARGET, 2):
def is_prime(number):
for divisor in primes:
if divisor * divisor > number:
return True
if number % divisor == 0:
return False
return True
if is_prime(number):
primes.append(number)
if primes[-1] - primes[-2] > end - start:
start, end = primes[-2:]
print("The longest run starts at", start + 1, "and stops at", end - 1, "and is", end - start - 1, "long.\n")
</code></pre>
<p>最后,就目标而言,问题没有明确规定,解决方案可能是错误的。考虑9586的目标,而不是10000。编写的代码将打印:</p>
<pre><code>The longest run starts at 1328 and stops at 1360 and is 33 long.
</code></pre>
<p>但通过在主循环之后添加以下代码:</p>
<pre><code>if TARGET - primes[-1] > end - start:
start, end = primes[-1], TARGET
</code></pre>
<p>我们得到了正确的答案:</p>
<pre><code>The longest run starts at 9552 and stops at 9585 and is 34 long.
</code></pre>
<p>如果目标更大,跑步时间会更长,但这仍然是最长的跑步时间</p>