1. 程式人生 > >LeetCode:204. 計數質數

LeetCode:204. 計數質數

1、題目描述

統計所有小於非負整數 的質數的數量。

示例:

輸入: 10
輸出: 4
解釋: 小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。

2、題解

2.1、解法一

  缺點:太慢

class Solution(object):
    def countPrimes(self, n):
        """
        :type n: int
        :rtype: int
        """

        count = 0
        flag = [False for i in range(n)]

        for i in range(2,n):
            if flag[i] == False:
                count += 1
                j = 1
                while j*i <n:
                    flag[j*i] = True
                    j+=1

        return count

2.2、解法二

class Solution(object):
    def countPrimes(self, n):
        """
        :type n: int
        :rtype: int
        """

        if n < 3:
            return 0
        sieve = [1] * (n / 2)
        for i in range(3, int(n**0.5)+1, 2):
            if sieve[i/2]:
                sieve[i*i/2::i] = [0] * ((n-i*i-1)/(2*i)+1)
        return 1 + sum(sieve[1:])