Цикл, идентифицирующий простые и непростые числа, генерирует ложный вывод - PullRequest
1 голос
/ 25 марта 2019

Я пишу код для определения простых и не простых чисел в данном списке.Идея заключалась в том, чтобы использовать вложенный цикл 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

В моей логике, очевидно, есть ошибка, но я ее не вижу.

1 Ответ

4 голосов
/ 25 марта 2019

x == number-1 не может быть истинным, поскольку 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))

Это исправляет ваш код. Вы можете прочитать больше об этой классической простой задаче: Проверка, является ли число простым числом в Python

...