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