Потому, что 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 по условию задачи код не должен вывести ни одного числа.