簡體   English   中英

Python 素數查找器不起作用(使用中斷命令)

[英]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

對此有多種解決方案。

  1. 將素數測試移至 function
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)
  1. 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)
  1. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM