• 力扣204题(如何高效寻找素数)


    204题、计数质数

    基本思想:

    筛数法

    具体实现:

    1、从2向后遍历,每遇到一个数字,将其倍数所对应的 is_prime 设为False,
    因此遇到新的数字num,is_prime[num]=True说明它不是任何2..num-1的数字的倍数,即质数。

    2、isPrime[i * i:n:i] = [0] * ((n - 1 - i * i) // i + 1) 指定步长参数,进行列表切片赋值,之所以从 i 的平方开始,是因为小于 i 的平方的倍数部分,在它之前就已经被排除掉了。

    举个例子:当 i 等于 5 时,5 的 2 倍为 10 ,所以 10 不是质数,需要排除,但是因为 2 是 10 的最小因数,之前在 i 等于 2 的时候就已经把 10 这个数排除掉了,我们不用再进行二次赋值排除,这样可以增加程序运行的效率。

    代码:

    def countPrimes(n):
        is_prime = [True]*(n+1)
        ans = 0
        for num in range(2,n+1):
            if is_prime[num]:
                ans+=1
                for k in range(1,n//num+1):
                    is_prime[num*k]=False
        return ans
    def count_primes_py(n):
        """
        求n以内的所有质数个数(纯python代码)
        """
        # 最小的质数是 2
        if n < 2:
            return 0
    
        isPrime = [1] * n
        isPrime[0] = isPrime[1] = 0   # 0和1不是质数,先排除掉
    
        # 埃式筛,把不大于根号 n 的所有质数的倍数剔除
        for i in range(2, int(n ** 0.5) + 1):
            if isPrime[i]:
                isPrime[i * i:n:i] = [0] * ((n - 1 - i * i) // i + 1)
    
        return sum(isPrime)
  • 相关阅读:
    C++强制类型转换操作符 const_cast
    URL的UTF-8 decode
    react-8 路由
    react-7 条件渲染与列表渲染
    react-6 react 生命周期
    react-5 受控组件,非受控组件与高阶函数
    react-4 react 组件的三大属性
    react-3 JSX 语法
    react-2 react环境搭建
    react-1 React
  • 原文地址:https://www.cnblogs.com/zhaojiayu/p/14799884.html
Copyright © 2020-2023  润新知