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。編寫的代碼將打?。?/p>
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.
如果目標更大,跑步會更長,但這仍然是最長的跑步。
添加回答
舉報