输入一个正整数,输出该整数以内的所有素数 Python
时间: 2025-05-25 13:21:43 浏览: 16
### Python 实现输出指定范围内的所有素数
要实现一个能够输出某个正整数以内所有素数的程序,可以采用埃拉托斯特尼筛法(Sieve of Eratosthenes),这是一种高效的算法用于找出一定范围内所有的素数。以下是完整的解决方案:
#### 方法描述
通过遍历从 2 到给定数值 n 的所有数字,并标记其中的合数,最终剩下的未被标记的数字即为素数。
#### 完整代码示例
```python
def find_primes(n):
if n < 2:
return []
# 创建布尔列表,默认全部设为True表示可能是素数
is_prime = [True] * (n + 1)
is_prime[0], is_prime[1] = False, False
# 使用埃拉托斯特尼筛法筛选素数
for i in range(2, int(n ** 0.5) + 1):
if is_prime[i]:
for j in range(i*i, n + 1, i):
is_prime[j] = False
# 收集所有标记为True的索引作为素数
primes = [i for i in range(n + 1) if is_prime[i]]
return primes
# 测试函数
if __name__ == "__main__":
try:
num = int(input("请输入一个正整数:"))
result = find_primes(num)
print(f"{num}以内的所有素数如下:")
print(*result)
except ValueError:
print("输入错误,请输入有效的正整数!")
```
#### 解释
上述代码实现了以下功能:
- 输入一个正整数 `n`。
- 初始化长度为 `n+1` 的布尔数组 `is_prime`,默认值全为 `True` 表示可能为素数[^3]。
- 将下标为 0 和 1 的位置设置为 `False`,因为它们不是素数。
- 对于每一个小于等于 √n 的数字 i,如果它尚未被标记为非素数,则将其倍数标记为非素数。
- 最终收集并返回所有仍保持为 `True` 的索引,这些就是素数。
#### 复杂度分析
时间复杂度主要由两部分组成:
- 遍历每个数字的时间复杂度 O(n log log n),这是基于埃拉托斯特尼筛法的经典理论结果。
空间复杂度则取决于存储布尔数组的空间需求,约为 O(n)[^1]。
---
###
阅读全文
相关推荐


















