[英]How the Prime number code in python works?
def is_prime(num):
for i in range(2,num):
if (num % i) == 0:
return False
return True
def all_primes(num):
primes = []
for n in range(2,num+1):
if is_prime(n) is True:
primes.append(n)
return primes
num = int(input("Enter upper limit: "))
primes = all_primes(num)
print(primes)
它是如何發生的... 理解的是,如果我輸入 10 它將是 10%2=5...余數為 0 所以它跳到下一個 9%2 = True 有余數。
它移動到下一個 9%3 余數是 0 所以它跳到 8% ...,然后是 7 ......但是我不明白的是 7 如果它檢查直到 7%7 ==0 那么如何是不是加了 7 作為素數???
我很困惑。
感謝您的任何評論
但我不明白的是 7 如果它檢查到 7%7 ==0
來自以下行的range
函數:
for i in range(2, num):
從2
到num - 1
。
因此, range()
函數不包括結果中的最后一個(停止)數字。
你理解錯了。 如果你輸入10
,它不會檢查10%2
然后是9%2
...
它會檢查10%2
,然后是10%3
,然后是10%4
... 即它會檢查10%i
,因為i
范圍從2
到9
。 但是,請注意,一旦余數為 0, is_prime
中的執行is_prime
停止:
for i in range(2,num):
if (num % i) == 0:
return False
因此,如果num
為10
,則只會檢查10%2
,並且由於它是0
,它將立即返回false
。
例如,如果num
為9
,它將檢查9%2
。 由於余數不是0
,它會向上移動到檢查9%3
。 那里的余數是0
,所以在這種情況下它會返回false
。
如果num
是7
,它會檢查7%2
。 余數不是0
所以它檢查7%3
,這也不同於0
,依此類推。 最后執行的檢查將是7%6
,因為for i in range(2,num)
意味着它將迭代i
范圍從2
到num-1
。 在這種情況下, is_prime(7)
將返回true
因為7%i
,其中i
范圍從2
到6
不同於0
。
素數,顧名思義,就是一個只能被它自己和1整除的數。
因此,您的函數is_prime
獲取您要檢查的數是否為素數,並嘗試在區間 [2, num) 內找到任何其他可以整除它的數,該區間是使用函數range(2,num)
在 for 循環內。
如果它找到任何情況,即如果滿足if (num % i) == 0
,我們知道有一個數可以整除它,因此,根據定義,它不是素數。 檢查整個列表后,如果找不到除數,我們可以說該數字是素數,即在您的函數上return True
。
Example:
You want to check 9
(1st step) num = 9, i = 2. 9%2 != 0, we continue in the loop with next value of i.
(2nd step) num = 9, i = 3. 9%3 == 0, we return False. As we know, 9 can divide by 3.
Another example:
You want to check 7
num = 7, i = 2 7%2 != 0, so we continue in the loop with the next value of i
num = 7, i = 3 7%3 != 0, so we continue in the loop with the next value of i
num = 7, i = 4 7%4 != 0, so we continue in the loop with the next value of i
num = 7, i = 5 7%5 != 0, so we continue in the loop with the next value of i
num = 7, i = 6 7%6 != 0, so we continue in the loop with the next value of i
The if was never fulfilled, therefore we reach the end of the loop and
call the next command, which is return True.
當為編號7
調用is_prime
時,循環將僅從2
運行到6
。 因此永遠不會檢查7%7
,在這種情況下返回 True 。
讓我們分別考慮這兩個函數:
def is_prime(num):
for i in range(2,num):
if (num % i) == 0:
return False
return True
這像這樣工作:
num
i
來假設值2
num % i == 0
False
i
增加 1 並重復最后兩步直到i
等於num - 1
True
因此,這永遠不會評估7 % 7
:當num
為7
時, i
的最后一個值為6
。
def all_primes(num):
primes = []
for n in range(2,num+1):
if is_prime(n) is True:
primes.append(n)
return primes
這會得到一個數字num
,這是要考慮的數字的上限,然后:
primes
的空list
2
循環n
直到排除num + 1
(或包括num
)is_prime(n)
的結果為 True,則將數字附加到list
。primes
的list
。最后是腳本的主體:
num = int(input("Enter upper limit: "))
primes = all_primes(num)
print(primes)
從鍵盤獲取一個字符串,將其轉換為int
並分配給num
,然后調用all_primes(num)
並將其結果分配給primes
並將list
打印到屏幕。
因此,當您從鍵盤輸入10
時,它會檢查從2
到10
的值是否為is_prime()
素數,而不是從10
並減少它們,正如您似乎建議的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.