我想从具有以下规范的列表中找到素数: A)如果数字是质数,则代码应显示“ [数字]是质数”。 B)如果数字不是素数,则应打印“ [number]不是素数”,以及该数字的因数(除1和数字本身以外):“ [factor]是[number]的因数]”。
check_prime = [26, 39, 51, 53, 57, 79, 85].
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
if i == num -1:
print("{} IS a prime number".format(num))
有人可以解释此代码吗?我不明白为什么会有num-1个素数。为什么我们在那里没有使用else语句?
答案 0 :(得分:1)
答案是range(2, num)
生成从2到num-1
的数字,因为range(0,n)
生成的数字通常从0到n-1。因此,您的i
将从2到num-1
。这就是为什么您检查if i == num -1:
来查看i
的所有值是否都已用于检查素数的原因。
答案 1 :(得分:1)
这是草率的代码。
逻辑是,当且仅当您经历了所有可能的因素均小于数字时,该数字才是质数。在这种情况下,i == num-1
。
有更好的方法来确定数字是否为质数。您可以搜索“确定主要的Python”并以更好的代码和更直接的逻辑获得很多成功。
例如,这更清楚:
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 :(得分:1)
由于内部循环在i
上迭代range(2, num)
,如果循环由于发现而没有遇到i
,则num - 1
最终将变成break
除数,即如何确定质数。
或者,您可以使用for-else
构造实现以下目标:仅当循环没有以更简洁的方式遇到break
时,才能确定数字为质数:
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))