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


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