3.31

时长:

一个小时

问题:

8-7 【Python0008】筛法求素数
分数 10
作者 doublebest
单位 石家庄铁道大学

【题目描述】用户输入整数n和m(1<n<m<1000),应用筛法求[n,m]范围内的所有素数。
【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】在一行中输入整数n和m,数据间以空格为间隔。
【输出格式】按照一行5个的格式输出[n,m]范围内的所有素数,其中每个素数的显示格式为:占5位,右对齐。
【输入样例】50 100
【输出样例】 53 59 61 67 71
73 79 83 89 97

代码量:

def sieve_of_eratosthenes(n, m):

if not (1 < n < m < 1000):
raise ValueError("输入的整数n和m应满足1<n<m<1000的条件。")

# 初始化一个布尔数组,索引表示数字,初始值为True表示可能是素数
is_prime = [True] * (m + 1)
is_prime[0], is_prime[1] = False, False # 0和1不是素数

# 筛选过程,p^2之前的已经考虑过了,所以从p^2开始,步长为p
for p in range(2, int(m**0.5) + 1):
if is_prime[p]:
for i in range(p*p, m + 1, p):
is_prime[i] = False

# 收集[n, m]范围内的素数
primes_in_range = [x for x in range(n, m + 1) if is_prime[x]]

return primes_in_range

# 示例使用
n = int(input("请输入整数n(1<n):"))
m = int(input("请输入整数m(n<m<1000):"))

try:
primes = sieve_of_eratosthenes(n, m)
print(f"[{n},{m}]范围内的素数有:{primes}")
except ValueError as e:
print(e)
posted @ 2024-06-19 17:41  孙锺鸣  阅读(3)  评论(0编辑  收藏  举报