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):
# 创建一个列表用于标记是否为素数,初始全部置为True
is_prime = [True] * (m + 1)
# 0和1不是素数,将其标记为False
is_prime[0] = is_prime[1] = False
# 使用筛法求素数
for i in range(2, int(m ** 0.5) + 1):
if is_prime[i]:
# 将i的倍数标记为非素数
for j in range(i * i, m + 1, i):
is_prime[j] = False
# 输出[n, m]范围内的素数,每行5个素数
count = 0
for num in range(n, m + 1):
if is_prime[num]:
# 将素数格式化为占5位,右对齐
print(f"{num:5}", end=' ')
count += 1
# 每行输出5个素数后换行
if count % 5 == 0:
print()
# 输入整数n和m
n, m = map(int, input().split())
# 输出[n, m]范围内的所有素数
sieve_of_eratosthenes(n, m)