1013 数素数 Python实现

本文介绍了一个高效算法来找出特定范围内的素数序列。通过改进的素数寻找算法,在限定的时间内准确输出从第M个素数到第N个素数之间的所有素数,特别适用于大规模数据集的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1013 数素数 (20)(20 分)

令P~i~表示第i个素数。现任给两个正整数M <= N <= 10^4^,请输出P~M~到P~N~的所有素数。

输入格式:

输入在一行中给出M和N,其间以空格分隔。

输出格式:

输出从P~M~到P~N~的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。

输入样例:

5 27

输出样例:

11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103

 问题很简单,判断素数,并输出。

但是使用常规的素数判断方法,有一项测试会出现超时。在前面1007 素数对猜想时也出现过这个问题,这次我们用上次使用的改进的素数寻找算法。

算法如下:

def prime(n,result):
    flag = [1]*(n+2)
    p=2
    while(p<=n):
        result.append(p)
        for i in range(2*p,n+1,p):
            flag[i] = 0
        while 1:
            p += 1
            if(flag[p]==1):
                break

该算法,是找出n以内的所有素数,并存放在result列表中。

该题的不同点在于,该题并未给出查找素数的具体范围,而是给出希望得到的素数个数。所以为了满足所有的测试用例,我们要给出一个合适的计算范围(n)。进过多次测试,得出将n设为200000可以满足所有测试用例。

为什么我们一定要用这个算法,而不改进单个素数的判断算法呢?  因为我不知道还能怎么改(哭笑)

程序:

def prime(n,result):
    flag = [1]*(n+2)
    p=2
    while(p<=n):
        result.append(p)
        for i in range(2*p,n+1,p):
            flag[i] = 0
        while 1:
            p += 1
            if(flag[p]==1):
                break
a = input().split()
result = []
prime(200000,result)
final = result[int(a[0])-1:int(a[1])]
if len(final)==1:
    print(final[0])
else:
    for i in range(len(final)-1):
        if (i+1)%10==0:
            print(final[i]) 
        else:
            print(final[i],end=" ")
    if (i+2)%10==0:
        print(final[i+1]) 
    else:
        print(final[i+1],end="")

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫虫(——)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值