所以,我寫了一個代碼來查找一個數字是否為 PRIME ......
我用兩種不同的方式寫了它,它們幾乎相同,但我有一個疑問。所以這里是:
第一個代碼:
num = int(input("Enter the number: "))
lim = num//2 1
for i in range(2,lim):
if num % i == 0:
print("Prime!")
break
else:
print("Not Prime!")
第二個代碼:
num = int(input("Enter the number: "))
for i in range(2,num):
if num % i == 0:
print("Prime!")
break
else:
print("Not Prime!")
第一個代碼采用輸入(num)并根據輸入設定一個限制(即半數 1),然后檢查num是否可以被范圍(2到lim)中的所有數字整除
第二個是相同的,但它只是檢查所有低于輸入的數字,而不是設定限制,這意味著它必須做更多的作業......
現在這兩個幾乎一樣,唯一的區別是我在第二個中節省了一行,輸出效率也更好!
你希望我更喜歡哪個代碼/
此外,如果此代碼有任何問題,指出它們會有所幫助!謝謝 :)
uj5u.com熱心網友回復:
解釋
迭代中最重要的部分,即確定一個數是否為素數,就是跟蹤它。沒有這個程序,在 OP 的程式中,不使用變數來處理這個問題,這意味著他每次都檢查一個數字是否為素數并在那個點結束。他還使用了一個else語法錯誤的陳述句。
為了防止這種情況,我們可以使用一個變數來跟蹤這一點。讓我們稱之為isprime。我們需要假設一個數永遠是素數,除非另有說明。這可以通過設定isprime為 default be來實作,當我們斷定它不是素數時True將其設定為是False,因為 is 有一個除數。最后,我們可以在最后檢查這個變數,并確定該數字是否是素數,因為False如果不是,它將被設定為,或者保持原樣True。
另一個觀察結果是確定素數的限制可以減少到sqrt(n)。這是因為我們不需要找到每個存在的因素,只要找到它對應的最低因素。讓我們看一個例子:
24 的因數:2、3、4、6、8、12
我們可以在此處停止檢查因素:
2, 3, 4 | 6、8、12、24
這是因為如果一個數有一個因數(例如大于平方根),它就會有一個小于平方根的相應因數。因此,我們可以將限制設定為sqrt(n),只是為了安心 O(sqrt(n))v的時間復雜度O(n)。
作為額外的說明,sqrt它沒有內置到 Python 中。您必須math使用以下方法從庫中匯入它:
from math import sqrt
最終代碼
# Setup
num = int(input("Enter the number: "))
lim = sqrt(num)
isprime = True
# Loop & check
for i in range(2,lim):
if num % i == 0:
isprime = False
break
# Results
if isprime:
print("Prime!")
else:
print("Not prime!")
uj5u.com熱心網友回復:
解決方案的邏輯是錯誤的。您可以切換“Prime”和“Not Prime”標簽。如下所示;
num = int(input("Enter the number: "))
lim = num//2 1
for i in range(2,lim):
if num % i == 0:
print("Not Prime!")
break
else:
print("Prime!")
解決方案 1 更有效,因為您不需要進行額外的計算來檢查 num//2 1。因此它是可取的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/364975.html
下一篇:Jacobsthal數遞回公式
