close

    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)
#輸出結果如下:

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 吳盈霖 的頭像
    吳盈霖

    吳盈霖的部落格

    吳盈霖 發表在 痞客邦 留言(0) 人氣()