Другие отметили ошибку в коде range(start,end)
.Исправляя это, ваш код для простых чисел может быть переписан следующим образом:
lower = int(input("from:"))
upper = int(input("to:"))
for num in range(lower,upper + 1):
if num > 1:
for i in range(2,max(num,3)):
if (num % i) == 0:
break
else:
print(num)
Это не самый быстрый способ запоминания простых чисел, каждое потенциальное простое число должно быть проверено на КАЖДОЕ меньшее число в качестве возможного делителя.Гораздо быстрее вместо этого посчитать вверх и вычислить кратные меньшего числа.Таким образом, нам нужно выполнить математику только один раз для каждого возможного делителя.
Для полноты, вот программа, которая может эффективно производить простые числа (использует метод сита Эратосфена).
#### INPUTS
lower = int(input("from:"))
upper = int(input("to:"))
### Code
n = upper
prime_booleans = [True for i in range(n+1)]
p = 2
while (p * p <= n):
# Is current number a prime, eliminate the numbers that are multiples of it
if (prime_booleans[p] == True):
for i in range(p * 2, n+1, p):
prime_booleans[i] = False
p += 1
# Print all prime numbers
for p in range(lower, n):
if prime_booleans[p]:
print p,