Поиск простых чисел от 1 до 20 кода не возвращает простое число 2, каков правильный алгоритм? - PullRequest
0 голосов
/ 10 июля 2019

Поиск простых чисел от 1 до 20

a = []
for i in range(2,20):
    for j in range(2,20):
        if((i % j) == 0):
            break;
        else:
            a.append(i)
return a

Это вывод, который я получил -

[3, 5, 5, 5, 7, 7, 7, 7, 7, 9, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19]

Я ожидаю, что 2 также должны быть включены в вывод

Ответы [ 2 ]

3 голосов
/ 10 июля 2019

Вы потеряли else, что делает сито неработоспособным.Кроме того, внутренний цикл должен повторяться только до j == i - 1.Правильный код будет выглядеть следующим образом:

a = []
for i in range(2,20):
    for j in range(2,i):
        if((i % j) == 0):
            break
    else:
        a.append(i)
return a

Разница: в исходном коде любой i, для которого найден j, такой, что i % j != 0, будет добавлен к a,С исправленным кодом, i будет добавлено, только если внутренний цикл не завершен break.Также ваш код проверяет делимость для всех чисел в диапазоне [2, 20[, но даже простые числа делятся сами по себе, поэтому 2 не было частью вывода вашего кода.

0 голосов
/ 10 июля 2019

В первой итерации двух циклов - i=2 и j=2.Тогда условие if истинно, и поэтому внутренний цикл останавливается без добавления 2 к a.

...