快乐的LeetCode --- 204. 计数质数

题目描述:

统计所有小于非负整数 n 的质数的数量。

示例:

输入: 10
输出: 4
解释: 小于 10 的质数一共有 4, 它们是 2, 3, 5, 7

解题思路1: 超出时间限制

引入flag标志,利用for循环进行判断


代码1:

class Solution(object):
    def countPrimes(self, n):
        i = 2
        res = []
        while(i < n):
            flag = 0
            for j in range(2, i):
                if i % j == 0:
                    flag = 1
                    break
            if flag == 0:
                res.append(i)
            i += 1
        return len(res)

解题思路2:

质数筛选


代码2:

import math
class Solution:
    def countPrimes(self, n):
        prime_indicator = [i >= 2 for i in range(n)]
        for i in range(2, int(math.ceil(math.sqrt(n)))):   # math.ceil(2.3) = 3 向上取整
                                        # 等价写法   for i in range(2, int(n ** 0.5) + 1):
            if prime_indicator[i]:
                for j in range(i**2, n, i):
                    prime_indicator[j] = False

        return sum(prime_indicator)

题目来源:

https://leetcode-cn.com/problems/count-primes/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章