循环识别素数和非素数会生成错误的输出

时间:2019-03-25 08:43:17

标签: python python-3.x primes

我正在编写代码以标识给定列表中的质数和非质数。 这个想法是使用一个嵌套的for循环来遍历列表,并根据2n-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

我的逻辑上显然有一个错误,但我看不到它。

1 个答案:

答案 0 :(得分:4)

x == number-1不正确,因为x的范围仅是number-2

此外,无需检查该数字,也无需检查平方根(包含在内),从而在数字很大的情况下极大地降低了复杂性和计算时间,并对内部{{1}使用else语句}循环,如果没有for发生就没有,您知道数字是素数:

break

这可以修复您的代码。您可以阅读有关此经典主要问题的更多信息:Checking if a number is a prime number in Python