Python 筛选法求解小于n的所有素数(使用for循环)
以下是使用 for 循环写出筛选法求解小于 n 的所有素数的 Python 代码:
n = int(input('请输入一个正整数 n:'))
# 创建一个长度为n的布尔数组,初始值都为True
is_prime = [True] * n
# 0和1不是素数,因此将它们设为False
is_prime[0] = False
is_prime[1] = False
# 从2开始遍历到n的平方根
for i in range(2, int(n ** 0.5) + 1):
# 如果i是素数,那么将i的倍数都设为False
if is_prime[i]:
for j in range(i ** 2, n, i):
is_prime[j] = False
# 打印小于n的所有素数
print('小于{}的素数有:'.format(n))
for i in range(2, n):
if is_prime[i]:
print(i, end=' ')
运行结果:
请输入一个正整数 n:30
小于30的素数有:
2 3 5 7 11 13 17 19 23 29
代码解释:
- 初始化布尔数组:创建一个长度为 n 的布尔数组
is_prime,初始值都为 True,表示所有数字都可能是素数。 - 设置 0 和 1:将
is_prime[0]和is_prime[1]设为 False,因为 0 和 1 不是素数。 - 筛选素数:使用两层循环进行筛选。外层循环遍历从 2 到 n 的平方根,内层循环将当前素数的倍数设为 False。
- 打印素数:遍历
is_prime数组,将值为 True 的索引打印出来,即小于 n 的所有素数。
筛选法的原理:
筛选法是一种高效的求解素数的算法。其核心思想是:
- 假设所有数字都是素数。
- 从 2 开始,将每个数字的倍数都标记为非素数。
- 最后剩下的未被标记的数字就是素数。
例如,求解小于 10 的所有素数:
- 初始化
is_prime数组:[True, True, True, True, True, True, True, True, True, True] - 将 0 和 1 设为非素数:
[False, False, True, True, True, True, True, True, True, True] - 2 是素数,将它的倍数设为非素数:
[False, False, True, False, True, False, True, False, True, False] - 3 是素数,将它的倍数设为非素数:
[False, False, True, False, True, False, True, False, True, False] - 4 已经被标记为非素数,跳过
- 5 是素数,将它的倍数设为非素数:
[False, False, True, False, True, False, True, False, True, False] - 6 已经被标记为非素数,跳过
- 7 是素数,将它的倍数设为非素数:
[False, False, True, False, True, False, True, False, True, False] - 8 已经被标记为非素数,跳过
- 9 已经被标记为非素数,跳过
最终,is_prime 数组为 [False, False, True, False, True, False, True, False, True, False],小于 10 的所有素数为:2, 3, 5, 7。
原文地址: https://www.cveoy.top/t/topic/ngPc 著作权归作者所有。请勿转载和采集!