首页 > 其他分享 >204. 计数质数(中)

204. 计数质数(中)

时间:2023-11-11 14:56:38浏览次数:30  
标签:count 204 筛法 示例 int 质数 内层 计数

目录

题目

  • 给定整数 n ,返回 所有小于非负整数 n 的质数的数量

示例 1:

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

示例 2:

输入:n = 0
输出:0

示例 3:

输入:n = 1
输出:0

法一、暴力法

  • 超时:时间复杂度是O(n^2)
class Solution:
    def countPrimes(self, n: int) -> int:
        count=0
        if n==1 or n==0:
            return 0
        for i in range (2,n):  #遍历从2到n-1的所有数,这些数将被依次判断是否为质数。
            for j in range (2,i):  #对于每个待判断的数i,内层循环从2到i-1遍历,用j作为除数进行判断。
                if i%j == 0:   #如果i能被j整除,说明i不是质数,跳出内层循环。
                    break
            else:   #如果内层循环正常结束,说明i不能被任何一个j整除,说明i是质数,计数器count加1。
                count+=1
        return count

法二、埃拉托斯特尼筛法(Sieve of Eratosthenes)

  • 挨个判断是不是质数,如果是质数则把该数的倍数都标注为质数
class Solution:
    def countPrimes(self, n: int) -> int:
        if n <= 2:
            return 0

        # 初始化一个布尔数组,用于标记数字是否为质数
        is_prime = [True] * n
        is_prime[0] = is_prime[1] = False   # 0和1不是质数,将它们标记为False

        # 使用埃拉托斯特尼筛法,遍历从2到根号n的所有数字
        for i in range(2, int(n**0.5) + 1):
            if is_prime[i]:# 如果当前数字为质数
                # 将所有当前质数的倍数标记为非质数
                for j in range(i*i, n, i):
                    is_prime[j] = False

        # 统计is_prime中值为True的个数,即质数的个数
        count = sum(is_prime)
        return count

法三、线性筛法

  • 埃氏筛的优化,埃氏筛同一个数比如12=26/34会被划多次造成浪费,线性筛则对此优化,
class Solution:
    def countPrimes(self, n: int) -> int:
        if n <= 2:
            return 0

        is_prime = [True] * n  # 初始化一个布尔数组,用于标记数字是否为质数
        primes = []  # 创建一个空列表,用于存储质数
        
        for i in range(2, n):# 遍历从2到n的所有数字
            if is_prime[i]:# 如果当前数字为质数,将其添加到质数列表
                primes.append(i)
            for p in primes: # 遍历质数列表
                if p * i >= n: # 计算当前质数与当前数字的乘积
                    break     # 如果乘积大于n,跳出循环
                is_prime[p * i] = False # 将乘积标记为非质数
                if i % p == 0:# 如果当前数字能被当前质数整除,跳出内层循环
                    break

        return len(primes)

标签:count,204,筛法,示例,int,质数,内层,计数
From: https://www.cnblogs.com/lushuang55/p/17823647.html

相关文章

  • 【学习笔记】初等数论-组合计数
    加法原理若完成一件事的方法有\(n\)类,其中第\(i(1\lei\len)\)类方法包括\(a_i\)种不同的方法,且这些方法互不重合,则完成这件事共有\(\sum\limits_{i=1}^{n}a_i\)种不同的方法。乘法原理若完成一件事的步骤有\(n\)个,其中第\(i(1\lei\len)\)个步骤包括\(a......
  • 【洛谷 P1980】[NOIP2013 普及组] 计数问题 题解(取余)
    [NOIP2013普及组]计数问题题目描述试计算在区间到的所有整数中,数字()共出现了多少次?例如,在到中,即在中,数字出现了次。输入格式个整数,之间用一个空格隔开。输出格式个整数,表示出现的次数。样例#1样例输入#1111样例输出#14提示对于的数据,,。思路求每个数字的......
  • 格路径计数
    格路径计数基础格路径计数问题:格路径上从\((0,0)\)走到\((n,m)\)只能向上或向右走,方案数。显然一共走\(n+m\)次,选出任意\(n\)次向上走方案数就是\(\binom{n+m}n\)。有限制格路径计数下面说的限制都是不接触到某条线的限制,若题目要求不超过,可以依次\(+1/-1\)。单......
  • 一个计数题
    我也不知道在哪里见的题qwqdescription给定\(n,k\),定义一个满二叉树(每个非叶子节点都有两个儿子的二叉树)权值为其每条从根出发的链经过的向左的边的数量的最大值。对于每个\(i\in[1,n]\)求出\(i\)个恰有叶子的权值不超过\(k\)的满二叉树的数量。\(n,k\leq5000\)sol......
  • Load Test Statistics 负载测试统计(负载测试计数器)
    LoadTestStatisticsLoadTestercollectsanextensivemeasurementsduringaloadtest.Thisdataiscollectedinsamples.Eachsamplehasmultiplemeasurementsassociatedwithit.Dependingonthemeasurementtype,somemeasurementsmaynotbaapplicable......
  • DP 与计数
    NFLSOJACF294CShaassandLight考虑初始已点亮的灯将所有剩下的灯划分成的连续段。除开头结尾外,每个长为\(l\)的连续段有\(2^l\)种操作序列。开头结尾的连续段只有\(1\)种操作序列。从前往后将所有的操作序列归并到全局的操作序列里,拿组合数随便乱搞搞就好了。代码......
  • 2023-11-08:用go语言,字符串哈希原理和实现 比如p = 233, 也就是课上说的选择的质数进制
    2023-11-08:用go语言,字符串哈希原理和实现比如p=233,也就是课上说的选择的质数进制"31256..."01234hash[0]=3*p的0次方hash[1]=3*p的1次方+1*p的0次方hash[2]=3*p的2次方+1*p的1次方+2*p的0次方hash[3]=3*p的3次方+1*p的2次方+2*p......
  • MySql按周,按月,按日分组统计数据
    知识关键词:DATE_FORMAT<!--按日查询-->SELECTDATE_FORMAT(created_date,'%Y-%m-%d')astime,sum(money)moneyFROMo_finance_detailwhereorg_id=1000GROUPBYtime<!--按月查询-->SELECTDATE_FORMAT(created_date,'%Y-%m')astime,su......
  • 动态加载资源 释放时要注意 引入引用计数统计
    今天开发时,释放了预制体资源引起报错,这里直接使用了bundle.release因为预制体的精灵图片是动态加载的,释放时将精灵图片一并释放了,引起错误改为引用计数,解决问题 cocos资源释放文档:https://docs.cocos.com/creator/manual/zh/asset/release-manager.html  资源的动态引......
  • 汇编-当前位置计数器$
    符号$被称为当前位置计数器.dataselfPtrDWORD$;声明了一个变量selfPtr,并将其初始化为该变量的偏移量       ......