我正在编写代码来识别给定列表中的质数和非质数。这个想法是使用一个嵌套的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显然,我的逻辑中有一个错误,但我看不到它。
发布于 2019-03-25 16:46:51
x == number-1不能为true,因为x的范围仅限于number-2。
此外,不需要检查该数字,检查平方根(包括),这大大减少了复杂性和计算时间的情况下的巨大的数字,并使用else语句的内部for循环,如果没有发生break,你知道数字是质数:
for number in check_prime:
for x in range (2,int(number**0.5)+1):
if number % x ==0:
print("{} is not a prime because {} is a factor of {}".format(number,x,number))
break
else:
print ("{} is a prime number".format(number))它修复了你的代码。您可以阅读有关这个经典素数问题的更多信息:Checking if a number is a prime number in Python
https://stackoverflow.com/questions/55333981
复制相似问题