-2

I am trying to build the sieve of eratosthenes in python but I get a different result than I expect. I can't understand why. When I run the code below, I am supposed to get the prime numbers, but I also get not prime numbers in the list. If you run the code you will see what I mean.

#sieve of eratosthenes
#Objective: To find the sum of primes up to a number
target_number = 100
list_of_all_numbers = [*range(3,target_number,2)]
print(*list_of_all_numbers)


for number in list_of_all_numbers:
    for i in list_of_all_numbers:
        if number != i and number%i == 0 and number in list_of_all_numbers:
            list_of_all_numbers.remove(number)
            break

sum = 0
for i in list_of_all_numbers:
    sum += i

print(sum+2)
print(list_of_all_numbers)

1 Answers1

0

This can be achieved by storing the "non primes" and then just summing the other numbers,

#sieve of eratosthenes
#Objective: To find the sum of primes up to a number
target_number = 100
list_of_all_numbers = [*range(3,target_number,2)]
print(*list_of_all_numbers)

notPrimes = []
primes = []

for number in list_of_all_numbers:
    for i in list_of_all_numbers:
        if number != i and number%i == 0:
            if number not in notPrimes:
                notPrimes.append(number)
            break

sum = 0
for number in list_of_all_numbers:
    if number not in notPrimes:
        sum += number
        primes.append(number)

print(sum+2)
print(notPrimes)
print(primes)
User1010
  • 789
  • 1
  • 6
  • 19