Python 我需要在这个列表中找到素数
我想从具有以下规格的列表中查找素数: A) 如果数字是素数,代码应打印“[number]是素数。” B) 如果数字不是质数,则应打印“[number]不是质数”,并打印该数字的一个因子,而不是1和数字本身:“[factor]是[number]的一个因子”Python 我需要在这个列表中找到素数,python,python-3.x,Python,Python 3.x,我想从具有以下规格的列表中查找素数: A) 如果数字是素数,代码应打印“[number]是素数。” B) 如果数字不是质数,则应打印“[number]不是质数”,并打印该数字的一个因子,而不是1和数字本身:“[factor]是[number]的一个因子” 有人能解释一下这个代码吗?我无法理解为什么有num-1来查找素数。为什么我们没有在这里使用else语句?答案是range(2,num)生成从2到num-1的数字,因为range(0,n)通常生成从0到n-1的数字。因此,您的i将从2运行到num
有人能解释一下这个代码吗?我无法理解为什么有num-1来查找素数。为什么我们没有在这里使用else语句?答案是
range(2,num)
生成从2到num-1的数字,因为range(0,n)
通常生成从0到n-1的数字。因此,您的i
将从2运行到num-1
。这就是为什么要检查如果i==num-1:
以查看i
的所有值是否都用于检查素数。这是一个草率的代码
逻辑是,这个数是素数,当且仅当你通过了所有可能小于这个数的因子。在这种情况下,i==num-1
有更好的方法来确定一个数是否为素数。您可以搜索“determineprimepython”,并通过更好的代码和更直接的逻辑获得更多点击率
例如,这一点更加明确:
import math
check_prime = [26, 39, 51, 53, 57, 79, 85].
for num in check_prime:
is_prime = True
for i in range(2, int(num**0.5) + 1):
if (num % i) == 0:
is_prime = False
break
if is_prime:
print("{} IS a prime number".format(num))
else:
print("{} is NOT a prime number, because {} is a factor of {}".format(num, i, num))
这对您来说更容易理解吗?因为内部循环在范围(2,num)
上迭代i
,i
最终会变成num-1
,如果循环没有因为找到除数而遇到中断,这就是确定素数的方式
或者,您可以使用for else
构造来实现仅当循环未以更清晰的方式遇到中断时才确定该数字为素数的目标:
for num in check_prime:
for i in range(2, num):
if (num % i) == 0:
print("{} is NOT a prime number, because {} is a factor of {}".format(num, i, num))
break
else:
print("{} IS a prime number".format(num))
math.sqrt
返回浮点,但range
需要整数参数。您还可以使用num**0.5
执行平方根运算,而无需任何导入。另外,is_prime
基本上设置一个标志,以查看循环是否以break
停止,这就是for..else
的基本功能。您是对的-for循环可以有一个else
块来捕获从未执行break
的情况。我想写这段代码的人不知道这一点,所以他们试图测试I
是否到达了范围的最后一步。但这是错误的,因为如果num
是2
(即prime),i
将永远不会递增。
for num in check_prime:
for i in range(2, num):
if (num % i) == 0:
print("{} is NOT a prime number, because {} is a factor of {}".format(num, i, num))
break
else:
print("{} IS a prime number".format(num))