[英]Python prime number finder doesn't work (using break command)
我正在嘗試制作一段相對有效的 Python 代碼,它將所有低於 200 萬的素數相加,但這段代碼似乎不起作用。 由於某種原因,它認為像 9 和 15 素數這樣的數字:
sum = 2
for num in range(3, 2000000, 2):
for i in range(2, 1+int(num**0.5)):
if num % i == 0:
break
sum += num
print(sum)
如所寫,您的代碼忽略了內部 for 循環中的檢查,並將當前數字求和,無論它是否為質數。
要么使用標志變量:
prime_sum = 2
for num in range(3, 2000000, 2):
is_prime = True
for i in range(2, 1+int(num**0.5)):
if num % i == 0:
is_prime = False
break
if is_prime:
prime_sum += num
print(prime_sum)
或使用 for 循環的 else 子句(僅在循環運行完成后運行 - 即沒有break
):
prime_sum = 2
for num in range(3, 2000000, 2):
for i in range(2, 1+int(num**0.5)):
if num % i == 0:
break
else:
prime_sum += num
print(prime_sum)
在將num
添加到sum
之前,您沒有檢查內部循環是否找到了一個因子。
您可以使用else:
循環塊來判斷循環是由於break
而完成還是停止。
sum = 2
for num in range(3, 2000000, 2):
for i in range(2, 1+int(num**0.5)):
if num % i == 0:
break
else:
sum += num
print(sum)
如果數字不是素數,則您將跳出內部循環,但仍在執行該行
sum += num
對此有多種解決方案。
def is_prime(x):
for i in range(2, int(x ** 0.5) + 1):
if x % i == 0:
return False
return True
sum = 2
for num in range(3, 2000000, 2):
if is_prime(num):
sum += num
print(sum)
is_prime
變量sum = 2
for num in range(3, 2000000, 2):
is_prime = True
for i in range(2, 1+int(num**0.5)):
if num % i == 0:
is_prime = False
break
if is_prime:
sum += num
print(sum)
all()
和列表理解sum = 2
for num in range(3, 2000000, 2):
if all([num % i != 0 for i in range(int(x ** 0.5) + 1)]):
sum += num
print(sum)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.