簡體   English   中英

試圖找到素數的python代碼。 代碼計數不是素數。 找不到原因

[英]python code trying to find prime number. Code is counting not prime number. Can't find why

我試圖在用戶選擇的范圍內找到每個素數,列出它們並計算它們。 我的代碼計數和列表編號不是素數。 我真的找不到原因? 有人可以幫我嗎。

print("This code will count how many prime number exist in a certain range")
count = 0
lower = int(input("Enter lower range: "))
upper = int(input("Enter upper range: "))
prime = []
for num in range(lower, upper + 1):
    if num > 1:
        for i in range(2,num):
            if (num % i) == 0:
                break
            else:
                prime.append(num)
                break
print(prime)
print("There are", len(prime), "prime number between", lower, "and", upper)

你的素數部分是錯誤的。 我將把它抽象為一種不同的方法,以使其更容易。 要成為素數, n%x必須支持任何x ,使得x在數字集合[2,ceil(sqrt(n))]

確保您import math

def is_prime(num):
    for i in range(2, math.ceil(num**(1/2))):
        if num%i==0:
            return False
    return True

然后,只需更換

if num > 1:
    for i in range(2,num):
        if (num % i) == 0:
            break
        else:
            prime.append(num)
            break

和,

if num>1:
   if is_prime(num):
      prime.append(num)

您的問題是您不等待所有除法檢查將數字附加到素數列表:

            if (num % i) == 0:
                break
            else:
                prime.append(num)
                break

您的代碼的修復:

        is_prime =True
        for i in range(2,num):
            if num % i == 0:
                is_prime = False
                break

        if is_prime:
            prime.append(num)

$ python prime_test.py 
This code will count how many prime number exist in a certain range
Enter lower range: 12
Enter upper range: 20
[13, 17, 19]
('There are', 3, 'prime number between', 12, 'and', 20)

問題就在這里,

    for i in range(2,num):
        if (num % i) == 0:    #If num is divisible by SOME i, it is not prime. Correct.
            break
        else:                 #If num is not divisible by SOME i, it is not prime. WRONG.
            prime.append(num)
            break

您應該像這樣檢查條件: If num is not divisible by ANY i, it is prime

使用 else 和 for 進行最少的更改,

    for i in range(2,num):
        if (num % i) == 0:
            break
    else:
        prime.append(num)

閱讀更多: 為什么python在for和while循環之后使用'else'?

這是從列表中獲取素數的解決方案。 詢問用戶應創建質數之間的范圍並將其存儲在list

list4=list(range(3,10,1))  
prime_num=[x for x in list4 if x%2!=0 and x%3!=0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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