我正在做一个 Python 作业,要求我编写 Sundaram 筛子的代码:
*- 从 1 到 n 的数字列表开始;
这是我的代码:
n = int(input())
num_lst = list(range(1, n + 1))
for i in num_lst:
for j in num_lst:
if (1 <= i <= j) and (i + j + (2 * i * j)) <= n:
num_lst.remove((i + j + (2 * i * j)))
print(num_lst)
for idx, k in enumerate(num_lst):
num_lst[idx] = 2 * k + 1
print(num_lst)
我看到许多使用列表推导式的解决方案,但在课程的这一点上,我们还没有涵盖它。
当输入为 50 时,我得到素数直到 101;但我也得到一些不是素数(27、45、63、99)。 我做错了什么?
尝试过这个:
n = int(input())
num_lst = list(range(1, n + 1))
to_remove = set()
for i in num_lst:
for j in num_lst:
if 1 <= i <= j and i + j + 2 * i * j <= n:
to_remove.add(i + j + 2 * i * j)
# Remove elements from num_lst after the nested loops
for num in to_remove:
if num in num_lst:
num_lst.remove(num)
print(num_lst)
for idx, k in enumerate(num_lst):
num_lst[idx] = 2 * k + 1
print(num_lst)
输出:
50
[1, 2, 3, 5, 6, 8, 9, 11, 14, 15, 18, 20, 21, 23, 26, 29, 30, 33, 35, 36, 39, 41, 44, 48, 50]
[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101]