1013 數素數 (20分)
令 Pi 表示第 i 個素數。現任給兩個正整數 M≤N≤10^4 ,請輸出 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
核心代碼就是素數的判定:(使用製表法):
這個題如果沒有用製表法,而是寫一個函數去判定素數,這樣就會超時。製表法就是利用數組這種,先將所有的數都標記爲素數,然後以素數從小到大進行循環取倍數
,看一下面的代碼,基本就會了。素數大規模的判定時最好用這種方法,不會超時!
MAX取值的一個坑:
這個題目如果MAX取得大一點就會超時,當時我就取MAX=1000001就超時了,我當時就很奇怪,我把MAX一步一步的變小
,最後才AC了!
# 素數判定核心代碼,需要記住!!!
MAX=105001
pri=[]
for i in range(MAX): # 讓所有的數先設爲素數,下面進行篩選
pri.append(1)
pri[0]=pri[1]=0
for i in range(2,MAX):
if pri[i]==1:
P.append(i)
for j in range(2,MAX):
if i*j>=MAX:
break
pri[i*j]=0
AC正確代碼:
MAX=105001
pri=[]
P=[]
for i in range(MAX): # 讓所有的數先設爲素數,下面進行篩選
pri.append(1)
pri[0]=pri[1]=0
for i in range(2,MAX):
if pri[i]==1:
P.append(i)
for j in range(2,MAX):
if i*j>=MAX:
break
pri[i*j]=0
m,n=map(int, input().split())
fg=1
for i in range(m-1,n):
print(P[i],end="")
if fg%10==0 or i==n-1:
print("")
else:
print(" ",end="")
fg+=1
人生就有許多這樣的奇蹟,看似比登天還難的事,有時輕而易舉就可以做到,其中的差別就在於非凡的信念。