算法学习打卡计划

leetcode第二百零四题—质数计数

2020-03-06  本文已影响0人  不分享的知识毫无意义

1.题目

原题

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

例子

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

2.解析

这道题最简单的就是暴力求解,定义一个函数判断是不是质数,为了减少计算量,就遍历i到sqrt(n)就行了,但是提交leetcode会超时。
第二个方法,是一个数学家家提出来的。其实思路很简单,这个数时质数了,后边所有他的倍数肯定不是质数,这就好说了,首先定义个长度为n的数组,初始假设都是质数,然后0,1位置都置0,以后遍历,只要遇到质数就让后边他的倍数都不是质数,如此就简单求解了。

3.python代码

#暴力求解,提交超时
class Solution:
    def countPrimes(self, n):
        count = 0
        for i in range(1, n):
            if self.isPrime(i):
                count += 1
        return count
    def isPrime(self, n):
        if n <= 1:
            return False
        for i in range(1, n//2+1):
            if i > 1 and n % i == 0:
                return False
        return True
#简便方法
    def countPrimes(self, n):
        if n <= 2:
            return 0
        prime = [1] * (n-1)
        prime[0], prime[1] = 0, 0
        for i in range(2, int(n**(1/2))+1):
            if prime[i] == 1:
                prime[i*2:n:i] = [0] * len(prime[i*2:n:i])
        return sum(prime)
上一篇下一篇

猜你喜欢

热点阅读