2024.5.15

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)

posted @ 2024-06-13 15:39  liuxuechao  阅读(8)  评论(0编辑  收藏  举报