1013 数素数 Python实现

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="")

猜你喜欢

转载自blog.csdn.net/qq_41398808/article/details/81180579
今日推荐