首页 > 解决方案 > 试图建立

问题描述

我正在尝试在 python 中构建 Eratosthenes 的筛子,但得到的结果与我预期的不同。我不明白为什么。当我运行下面的代码时,我应该得到素数,但我也没有得到列表中的素数。如果你运行代码,你会明白我的意思。

#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)

标签: pythonmath

解决方案


这可以通过存储“非素数”然后将其他数字相加来实现,

#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)

推荐阅读