Python

Питон. Ошибка в программе. Вычисление простых чисел

Здравствуйте, подскажите пожалуйста в чем ошибка

Можете объяснить алгоритм нахождения простых чисел? Почему for j in range(2, int(i / 2 + 1)): в этой строке конечная точка интервала делится на два и прибавляется 1?

Вот текст задачи
Напишите программу, которая выводит все простые числа, меньшие данного натурального числа.
IC
Ivan Ciorba
95
Потому, что i / 2 + 1 - глупость, которую любят пихать в свой код неучи. Чтобы проверить число k на простоту, надо проверять делители не до k / 2, а до sqrt(k).

Если простое число около 1000000 данный код проверит около 500000 делителей, а достаточно проверить всего 500 (только нечётные).

В любом составном числе обязательно будет делитель не меньший двух и не больший квадратного корня этого числа. При этом 2 можно проверить отдельно, а в цикле проверять только нечётные делители.

Но задачу нахождения всех простых чисел в диапазоне намного эффективнее решать не тупой проверкой каждого числа диапазона, а решетом Эратосфена:
 n = int(input())
t = [False for i in range(n)]
for i in range(2, n):
if t[i]: continue
for j in range(i * i, n, i): t[j] = True
print(i)
Ошибка твоего кода в том, что в условии задачи написано МЕНЬШЕ данного числа, а код при f < 4 ищет простые числа, которые МЕНЬШЕ ИЛИ РАВНЫ данному числу.
При вводе 2 по условию задачи код не должен вывести ни одного числа.
Валерий Лукьянов
Валерий Лукьянов
60 882
Лучший ответ
Ivan Ciorba спасибо вам большое, очень помогли!
Перебор делителей тоже лигитимный алгоритм для поиска простых чисел, не одним Эратосфеном живы...
Вот нормальная его реализация к которой вроде не придирешся, поиск идет только до квадратного корня числа
 def isPrime(n): 
if n < 2: return False
i,limit = 2,n ** .5
while i
ДН
Днр Немец
53 835
Ivan Ciorba мы еще не проходили функции..я поищу информацию о них,спасибо вам!
Валерий Лукьянов Легитимный для проверки относительно небольшого числа на простоту. Но для проверки на простоту диапазона чисел он неэффективен.