我正在编写代码以标识给定列表中的质数和非质数。
这个想法是使用一个嵌套的for
循环来遍历列表,并根据2
到n-1
范围内的数字检查它,其中n
是被检查。
不幸的是,我在执行时想出的代码无法产生预期的输出,而且我似乎找不到原因。
check_prime = [26, 39, 51, 53, 57, 79, 85]
## write your code here
## HINT: You can use the modulo operator to find a factor
for number in check_prime:
for x in range (2,number-1):
if (number %x) ==0:
print("{} is not a prime because {} is a factor of {}".format(number,x,number))
break
elif x == number-1:
print ("{} is a prime number".format(number))
我希望使用素数或非素数语句获得每个值的输出,但实际上我只得到非素数语句,即使那样它们都是假的:
26 is not a prime because 2 is a factor of 26
39 is not a prime because 3 is a factor of 39
51 is not a prime because 3 is a factor of 51
57 is not a prime because 3 is a factor of 57
85 is not a prime because 5 is a factor of 85
我的逻辑上显然有一个错误,但我看不到它。
答案 0 :(得分:4)
x == number-1
不正确,因为x
的范围仅是number-2
。
此外,无需检查该数字,也无需检查平方根(包含在内),从而在数字很大的情况下极大地降低了复杂性和计算时间,并对内部{{1}使用else
语句}循环,如果没有for
发生就没有,您知道数字是素数:
break
这可以修复您的代码。您可以阅读有关此经典主要问题的更多信息:Checking if a number is a prime number in Python