Вы неправильно поняли свою логику.Вот что делает ваш код:
- Изучайте числа в порядке возрастания от
2
до введенного n
. - Для каждого числа
i
проверьте, есть ли какое-либо число a
между 2
и n
делит i
- Если
a
делит i
, добавьте i
в список, а затем перейдите к следующему i
Это не даст вам простое число.На самом деле, мне трудно понять, что это даст , но простое число, вероятно, не так.Вместо этого посмотрите на эту функцию, которая будет возвращать все простые числа, меньшие или равные данному числу - вы можете сравнить ее с вашим кодом, чтобы выяснить, где вы ошиблись:
def getPrimesLessThanOrEqualTo(n):
if n <= 1: # Anything 1 or less has no primes less than it.
return "" # So, return nothing.
list = [2] # 2 is the lowest prime number <= n
for i in range(3, n+1): # We start at 3 because there's no need to re-check 2
for a in list: # Instead of iterating through everything less than
# i, we can just see if i is divisible by any of
# the primes we've already found
if i % a == 0: # If one of the primes we've found divides i evenly...
break # then go ahead and try the next i
list.append(i) # Now, if we got through that last bit without
# hitting the break statement, we add i to our list
return "\n".join(list) # Finally, return our list of primes <= i
Если вы хотитеЧтобы быть более эффективным, вы могли бы даже использовать range(3, n+1, 2)
, чтобы сосчитать по два - таким образом, избегая смотреть на четные числа вообще.