1. 程式人生 > >Python-用filter()刪除1~100的素數和一些思考

Python-用filter()刪除1~100的素數和一些思考

首先,用filter()刪除1~100的素數:

l=range(1,101)
def delprimenum(str):
    if str==1:
        return str
    for i in range(2,int(math.sqrt(str)+1)):
        if str%i==0:
            return str
print filter(delprimenum,l)

其間遇到了一些問題:

  • if str==1寫在for下判斷不到,也就是不返回1
    乍一想和認真的乍一想都覺得i in range(2,int(math.sqrt(str)+1))是對i的操作,不會影響str的輸出,但是給現實跪了,輸出輸出輸出,發現str為1,2,3時range都是[]空的,不解,調查了一下,發現自己理解太膚淺了.
    range(stop) -> list of integers range(start, stop[, step]) -> list of integers
    Return a list containing an arithmetic progression of integers. range(i, j) returns [i, i+1, i+2, …, j-1]; start (!) defaults to 0. When step is given, it specifies the increment (or decrement). For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!

    These are exactly the valid indices for a list of 4 elements.
    就是這句話沒有認真讀,導致無論如何也無法理解為什麼range(2,2)返回的是[]

  • 第二個問題也算是複習,成功的輸出了1-100的合數後,從百度抄了輸出1-100的質數的程式碼,想要檢測一下這100個數是不是全了,想起來曾經學過一個類似list的什麼可以計算集合運算,查了一下是set()

  • 然後就是尋找素數的演算法:

def is_prime(n):
    list_num = []
    for i in range(2, n):
        for num in
range(2, int(math.sqrt(n))+1): if i % num == 0 and i != num: break elif i % num != 0 and num == (int(math.sqrt(n))): list_num.append(i) return list_num print is_prime(100)
  • 對於其中的兩個判斷,首先”一旦找到一個可以被非自身的數整除的數就算是一個合數”,其次”一個在當前整個迴圈中都沒被break的數,在這個迴圈結束時加入素數列表”