2 回答
TA贡献1803条经验 获得超3个赞
您需要将a和的值保存b到单独的变量中,以便可以在循环后打印它们。
b = priemen[1]
maxrow = 0
for n in priemen[2:]:
a = b
b = n
row = b - a - 1
if row > maxrow:
maxrow = row
a_max = a
b_max = b
if maxrow != 0:
print("The longest row starts at", a_max + 1, "and stops at", b_max - 1, "and is", maxrow, "long.")
其他注意事项:
a_max
我还没有初始化b_max
- 但最终的if
测试是为了防止任何尚未设置的情况我已重命名
next
为n
,因为next
这是内置名称该
a = priemen[0]
行毫无意义,所以我已将其删除
TA贡献1815条经验 获得超10个赞
我发现这段代码效率低下并且存在问题。首先,它的效率很低,因为它测试从 1 到x
for deler in range(1, x):
当它只需要测试从 3 到的平方根的奇数除数(处理偶数之后)时。但即使这样也是低效的,因为它正在创建一个素数列表,它可以用作除数来进一步加快速度!最后,就效率而言,我相信它可以一次性完成:x
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")
最后,就目标而言,问题未明确说明,并且解决方案可能是错误的。考虑目标为 9586 而不是 10000。编写的代码将打印:
The longest run starts at 1328 and stops at 1360 and is 33 long.
但是通过在主循环之后添加以下代码:
if TARGET - primes[-1] > end - start:
start, end = primes[-1], TARGET
我们得到正确答案:
The longest run starts at 9552 and stops at 9585 and is 34 long.
如果目标更大,跑步会更长,但这仍然是最长的跑步。
添加回答
举报