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

Loop identifying primes and non-primes generates false output

我正在编写代码来识别给定列表中的质数和非质数。 这个想法是使用一个嵌套的 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

我的逻辑明显有错误,但是我看不出来

x == number-1 不可能为真,因为 x 的范围仅为 number-2

此外,不需要检查到那个数字,检查到平方根(包括),这在巨大数字的情况下大大降低了复杂性和计算时间,并使用 else 语句用于内部 for循环,no if no break happened, you know the number is prime:

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