leetcode刷題--Count Primes

黃思喆發表於2015-05-17

題目:求小於等於n的所有質數數量

現在求質數數量一般用埃拉託斯特尼篩法,簡稱篩法。可能很多學過小學奧數的同學都知道是怎麼回事(小學奧數太可怕了233)基本原理就是從最小的質數開始計算這些質數的倍數,將這些倍數標記為合數,於是小於n的數中除了合數剩下的就是質數了.

需要注意的是1不是質數也不是合數,要先將其標記為0

程式碼:

class Solution:
    # @param {integer} n
    # @return {integer}

    def countPrimes(self,n):

        if n<=2:
            return 0
        map = list(range(n))
        map[1]=0

        i=2
        while (i*i<n):
            if map[i] != 0:
                j=2
                while j*i<n:
                    map[j*i]=0
                    j+=1
            i+=1
        count = 0
        for i in map:
            if i != 0:
                count+=1
        return count

相關文章