PTA 1013 数素数 python超时解决

题目:

令 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中的思想,发现有两个判定超时。随后使用用空间换时间的方法,原理非常简单:一个大范围内所有数字标记为true,找到一个素数将大范围内此素数的所有倍数全标记为false,并将此素数加入队列。依次选择素数进行标记(标记为true的数即为素数)。

python代码:

str1 = list(map(int , input().split()))
l = []
num = 3
flag = [True]*(150005)
p=2
while(p<=150000):
    l.append(p)
    for i in range(2*p,150000,p):
        flag[i] = False
    while 1:
        p += 1
        if(flag[p]==True):
            break
l = l[str1[0] - 1 :str1[1]]
for i in range(len(l)):
    if (i+1)%10 == 0:
        print(l[i])
    elif i == str1[1]-str1[0]:
        print(l[i], end='')
    else:
        print(l[i], end=' ')


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章