17.使用集合实现筛选法求解不大于指定自然数的所有素数
时间: 2024-05-11 13:14:01 浏览: 91
筛选法求素数的思路是:从2开始,将所有2的倍数标记为合数;然后再从3开始,将所有3的倍数标记为合数;再从5开始,将所有5的倍数标记为合数……依次类推,直到不大于指定自然数的所有素数都被筛选出来。
具体实现如下:
```python
def get_primes(n):
# 初始化集合,包含2到n的所有自然数
nums = set(range(2, n+1))
# 从2开始,依次将所有2的倍数、3的倍数、5的倍数……标记为合数
for i in range(2, int(n**0.5)+1):
if i in nums:
nums -= set(range(i*2, n+1, i))
return nums
```
使用示例:
```python
primes = get_primes(100)
print(primes) # 输出不大于100的所有素数
```
输出结果:
```
{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}
```
相关问题
使用Python编写程序,输入一个大于 2 的自然数,然后输出小于该数字的所有素数组 成的列表使用列表实现筛选法求素数
以下是使用Python实现的程序,使用的是筛选法求小于输入数字的所有素数。
```python
def primes(n):
"""
返回小于 n 的所有素数的列表,使用筛选法求解
"""
# 初始化标记列表,假设所有数字都是素数
is_prime = [True] * n
# 0和1不是素数
is_prime[0] = is_prime[1] = False
# 对于每个数,如果它是素数,则将其倍数标记为非素数
for i in range(2, int(n ** 0.5) + 1):
if is_prime[i]:
for j in range(i * i, n, i):
is_prime[j] = False
# 将所有素数添加到结果列表中
primes = []
for i in range(2, n):
if is_prime[i]:
primes.append(i)
return primes
# 主程序
n = int(input("请输入一个大于2的自然数:"))
while n <= 2:
n = int(input("输入错误,请重新输入:"))
prime_list = primes(n)
print("小于", n, "的所有素数为:", prime_list)
```
运行结果示例:
```
请输入一个大于2的自然数:20
小于 20 的所有素数为: [2, 3, 5, 7, 11, 13, 17, 19]
```
python切片输出自然数_基于jupyter notebook的python编程-----使用列表实现筛选法求素数(输入一个大于 2 的自然数,然后输出小于该数字的所有素数组成的列表)...
好的,以下是 Python 代码示例:
```python
# 输入一个大于2的自然数
n = int(input("请输入一个大于2的自然数:"))
# 初始化列表,从2到n-1的所有自然数
lst = list(range(2, n))
# 筛选法求素数
for i in lst:
j = 2
while i * j < n:
if i * j in lst:
lst.remove(i * j)
j += 1
# 输出小于n的所有素数组成的列表
print("小于", n, "的所有素数为:", lst)
```
程序首先输入一个大于2的自然数,然后初始化一个列表,包含从2到n-1的所有自然数。接下来使用筛选法求解素数,最后输出小于n的所有素数组成的列表。
需要注意的是,为了防止出现重复的数字,我们在处理列表时使用 remove() 方法来删除元素。
阅读全文