Простые числа, сито эрастфосов, питон - PullRequest
0 голосов
/ 24 ноября 2018

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

Теперь этот блок кода должен выполнять итерацию для всех значений consecInt (переменная, в которой хранится список от 2 до этого наибольшего целого числа) и удалять их кратные.Но по какой-то причине я не совсем понимаю, это работает только для первого значения.

print("                 Sieve of Erasthothenes\n    Program that generates the possible prime numbers within a given range")

n = int(input("\nEnter the highest range:   "))

def primeList(n):

    j = 2
   consecInt = [int(i) for i in range(2, n+1)]

#A = [i != False for i in range(2, n+1)]

    for i in consecInt:
        p = i
        while j <= n:
            c = j*p
            if c <= n:
                consecInt.remove(c)
             j+=1

    print(consecInt)

primeList(n)

1 Ответ

0 голосов
/ 24 ноября 2018

Вы должны сбрасывать j в 2 на каждой итерации цикла for.Кроме этого, есть пара других ошибок.

def primeList(n):
    consecInt = [int(i) for i in range(2, n+1)]

    for i in consecInt:
        j = 2      ## reset `j` to 2 at every iteration
        while j*i <= n:   ## it is sufficient to check `j*i <= n` rather than `j <= n`
            c = j*i

            if c in consecInt:    ## if `c` is NOT in consecInt, a ValueError will be raised
                consecInt.remove(c)

            j += 1

    print(consecInt)

primeList(n)
...