import copy #載入copy模組
n=input("lease input one number and (>=2):") #讓使用者自行輸入一個大於2的數字
#-------------------------------------------------
if str(n).isdigit()==True and int(n)>=2: #檢查使用者輸入的數字是否正確
s=set(range(2,int(n)+1)) #創建一個2到數字n的集合物件
s1=copy.deepcopy(s) #利字copy.deepcopy 深複製出一個內容和s集合一樣但記憶體位置卻不同的集合物件
for i in s: #利用迴圈,從小到大將每個數字的2、3、4、5…倍的數字全部刪除,只保留自己本身
m=2
while i*m<int(n)+1:
if i*m in s:
s1.discard(i*m) #利用discard函數刪除集合內的元素,如果集合裡沒有這個物件,並不會報錯,如果利用remove或pop函數來刪除,萬一s1物件內的元素早就被刪除了,就會報錯而程式中止了。
m+=1
print(s1) #剩下的數字就是質數了
else:
print("輸入錯誤,程式結束")
#-------------------------------------------------
#------------------精簡版----------------------
n=999
d=set(range(2,n+1))
for i in range(2,(n+2)//2): #只取數字n+2的一半為範圍,
m=2
while i*m<(n+1):
if i*m in d:
d.discard(i*m)
m+=1
print(d)
#輸出結果如下: