2024.5.15(周三)

【题目描述】用户输入整数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(n, m):
    """
    输入两个正整数n和m,返回[n,m]范围内的所有素数的列表
    """
    # 初始化一个长度为m-n+1的列表,用于标记数值是否为素数
    is_prime = [True] * (m - n + 1)
    # 如果n为1,则将1标记为合数
    if n == 1:
        is_prime[0] = False
    # 从2开始,将所有能被2整除的数标记为合数
    for i in range(2, int(m ** 0.5) + 1):
        for j in range(max(i ** 2, (n + i - 1) // i * i), m + 1, i):
            if j >= n and is_prime[j - n]:
                is_prime[j - n] = False
    # 将所有未被标记为合数的数加入素数列表
    primes = [i + n for i in range(m - n + 1) if is_prime[i]]
    return primes


# 输入n和m
n, m = map(int, input("请输入n和m(1 < n < m < 1000):").split())
if not 1 < n < m < 1000:
    print("输入有误,请重新输入")
    n, m = map(int, input("请输入n和m(1 < n < m < 1000):").split())
else:
    print("该范围内的所有素数为:", end='')
    print(sieve(n, m))
复制代码

 

posted @   记得关月亮  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示