題目:
令 Pi表示第 i 個素數。現任給兩個正整數 M≤N≤104 ,請輸出 PM到 PN的所有素數。
輸入格式:
輸入在一行中給出 M 和 N,其間以空格分隔。
輸出格式:
輸出從 PM到 PN的所有素數,每 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=' ')