【LeetCode每日一题】——204.计数质数

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时空频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 数组

二【题目难度】

  • 中等

三【题目编号】

  • 204.计数质数

四【题目描述】

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

五【题目示例】

  • 示例 1

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

    • 输入:n = 0
    • 输出:0
  • 示例 3

    • 输入:n = 1
    • 输出:0

六【题目提示】

  • 0 < = n < = 5 ∗ 1 0 6 0 <= n <= 5 * 10^6 0<=n<=5106

七【解题思路】

  • 该题如果使用暴力方法,那么很简单:
    • 遍历每个数字
    • 判断每个数字都否是质数
  • 不过暴力方法的时间复杂度很高,本题的测试用例无法通过
  • 暴力方法超时的原因在于需要逐一判断每个数字,所以我们对其进行优化,即采用埃拉托斯特尼筛法进行计算:
    • 最开始我们假设所有数字都是质数
    • 然后从2开始遍历到 n \sqrt{n} n
    • 如果当前遍历到的数字为质数,那么设置其所有倍数都是质数
    • 最后返回质数的数量即可
  • 具体细节可以参考下面的代码

八【时空频度】

  • 时间复杂度: O ( n l o g l o g n ) O(n log log n) O(nloglogn),其中 n n n为传入参数的值
  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n为传入参数的值

九【代码实现】

  1. Java语言版
class Solution {public int countPrimes(int n) {// 初始化时假设所有数字都是质数boolean[] isPrime = new boolean[n];// 使用埃拉托斯特尼筛法进行计算for (int i = 2; i < Math.sqrt(n); i++) {// 如果当前数字为质数,那么其所有倍数都是质数(注意范围不要超过给定值)if (isPrime[i] == false) {for (int j = i * i; j < n; j += i) {isPrime[j] = true;}}}// 最后筛选剩下的就是所有质数,计算其数量即可int count = 0;for (int i = 2; i < n; i++) {if (isPrime[i] == false) {count++;}}return count;}
}
  1. Python语言版
class Solution:def countPrimes(self, n: int) -> int:# 初始化时假设所有数字都是质数is_prime = [True] * 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# 最后筛选剩下的就是所有质数,计算其数量即可return sum(is_prime[2:])  
  1. C语言版
int countPrimes(int n)
{// 初始化时假设所有数字都是质数int* isPrime = (int*)calloc(n, sizeof(int));// 使用埃拉托斯特尼筛法进行计算for (int i = 2; i < sqrt(n); i++){// 如果当前数字为质数,那么其所有倍数都是质数(注意范围不要超过给定值)if (isPrime[i] == 0){for (int j = i * i; j < n; j += i){isPrime[j] = 1;}}}// 最后筛选剩下的就是所有质数,计算其数量即可int count = 0;for (int i = 2; i < n; i++){if (isPrime[i] == 0){count++;}}free(isPrime);return count;
}

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. Python语言版
    在这里插入图片描述

  3. C语言版
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/62866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络】细说IP

文章目录 概述IP地址的组成IP地址的分类IP地址的作用 分类一、A类IP地址二、B类IP地址三、C类IP地址四、D类IP地址五、E类IP地址 协议报文子网掩码一、定义与功能二、表示方法三、子网掩码与IP地址的关系四、子网掩码的设置与配置五、实例说明 IPv6一、定义与背景二、地址格式与…

tar.gz压缩包校验是否损坏

1. 使用 tar 命令检查 tar 命令有一个 -t 选项&#xff0c;可以用来列出压缩包中的内容&#xff0c;并在过程中检查文件是否损坏。如果压缩包损坏&#xff0c;tar 会报错。 命令&#xff1a;tar -tzf filename.tar.gz-t&#xff1a;列出压缩包中的内容。-z&#xff1a;表示压…

【数据事务】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

【机器学习】机器学习的基本分类-监督学习-决策树-ID3 算法

ID3&#xff08;Iterative Dichotomiser 3&#xff09;是决策树的一种构造算法&#xff0c;由 Ross Quinlan 在 1986 年提出。它主要用于分类问题&#xff0c;通过信息增益选择特征来构建决策树。ID3 假设数据是离散型特征&#xff0c;且不支持连续型数据。 1. 核心思想 划分标…

JAVA |日常开发中读写XML详解

JAVA &#xff5c;日常开发中读写XML详解 前言一、XML 简介二、在 Java 中读取 XML2.1 使用 DOM&#xff08;Document Object Model&#xff09;方式读取 XML2.2 使用 SAX&#xff08;Simple API for XML&#xff09;方式读取 XML 三、在 Java 中写入 XML3.1 使用 DOM 方式写入…

ISAAC SIM踩坑记录--Omniverse Launcher添加代理

最近Omniverse Launcher不知道又抽什么疯&#xff0c;在Exchange界面安装各种软件都不成功&#xff0c;报错如下&#xff1a; FetchError: request to https://launcher-index-prod.s3.amazonaws.com/en/components.json failed, reason: Client network socket disconnected…

mac电脑多个ssh keys共存

一、同一台电脑&#xff0c;不同域名的git仓库为什么要设置不同的ssh keys&#xff1f; 每个git仓库通常要求使用唯一的ssh key&#xff0c;以防止权限冲突和安全问题。 权限控制&#xff1a;每个git仓库的权限是独立的&#xff0c;使用不同的ssh keys可以更好的管理权限&…

软件设计师笔记-算法设计与分析面向对象技术

算法设计与分析 算法的特性 有穷性确定性可行性输入输出 算法的表示方法 自然语言流程图程序设计语言伪代码 递归算法求时间复杂度 展开法&#xff1a;将等式依次展开代换法&#xff1a;用所猜测的值代替函数的解 分治法 将一个难以直接解决的大问题分解成一些规模较小…

第9章 大模型的有害性(上)

9.1 引言 本章将探讨大型语言模型&#xff08;LLMs&#xff09;可能带来的有害性&#xff0c;重点讨论以下几个方面&#xff1a; 性能差异社会偏见和刻板印象 在后续内容中&#xff0c;还会涉及其他层面的危害&#xff0c;如有害信息、虚假信息、隐私和安全风险、版权问题、…

Hyperf jsonrpc

依赖的 composer 包 composer require hyperf/json-rpc composer require hyperf/rpc-server composer require hyperf/rpc-client composer require hyperf/service-governance composer require hyperf/service-governance-consul composer require hyperf/service-gove…

ECharts柱状图-交错正负轴标签,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个柱状图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供…

07《缓存》计算机组成与体系结构 系列课

目录 深入了解缓存内存 缓存的重要性 游戏中的存储需求与主内存 虚拟内存和按需分页 现代系统中的多级缓存 缓存级别的大小与速度 缓存相关的术语 缓存命中与未命中 页面命中与缺页 局部性原理 结语 深入了解缓存内存 大家好&#xff0c;欢迎来到今天的课程。上节课…

【Exchange渗透02】Exchange 渗透信息收集

目录 一、Exchange 介绍 二、Exchange基础 1. exchange 开放端口 2. 域内定位 exchange 服务器 3. exchange 相关账号 4. exchange 目录介绍 管理中心 /ecp Outlook用户邮箱 /owa 三、Exchange 外网信息收集 1. 识别exchange版本 2. 通过exchange获取AD域名 3. 探测…

Linux中dos2unix详解

dos2unix 是一个用于将文本文件从DOS/Windows格式转换为Unix/Linux格式的工具。在不同的操作系统中&#xff0c;文本文件中的换行符表示方式是不一样的。具体来说&#xff1a; 在DOS和Windows系统中&#xff0c;换行由两个字符组成&#xff1a;回车&#xff08;Carriage Retur…

贵州大学oj平台软工24-11-27第5次小测

题目&#xff1a;阶乘和函数 题目描述 设计一个计算阶乘和的函数&#xff0c;用于求1!2!...n!并返回结果。 其中n是函数的参数。 程序的开始部分及main函数已经写好如下&#xff1a; #include <stdio.h> double factSum(int n); int main(){ int n; scanf("…

FPGA实战篇(触摸按键控制LED灯)

1.触摸按键简介 触摸按键主要可分为四大类&#xff1a;电阻式、电容式、红外感应式以及表面声波式。根据其属性的不同&#xff0c;每种触摸按键都有其合适的使用领域。 电阻式触摸按键由多块导电薄膜按照按键的位置印制而成&#xff0c;但由于耐用性较差且维护复杂&#xff0c…

java基础概念47-ArrayList、LinkList和迭代器

一、ArrayList集合 1-1、ArrayList的两种添加信息的方式 1-2、ArrayList集合底层逻辑 1、利用空参创建的集合&#xff0c;在底层创建一个默认长度为0的数组 2、添加第一个元素时&#xff0c;底层会创建一个新的长度为10的数组 3、存满时&#xff0c;会扩容1.5倍。 4、如果…

Milvus python库 pymilvus 常用操作详解之Collection(下)

上篇博客 Milvus python库 pymilvus 常用操作详解之Collection&#xff08;上&#xff09; 主要介绍了 pymilvus 库中Collection集合的相关概念以及创建过程的代码实现&#xff0c;现在我们要在该基础上实现对于collection中插入数据的混合检索&#xff08;基于dense vector 和…

C++学习日记---第16天

笔记复习 1.C对象模型 在C中&#xff0c;类内的成员变量和成员函数分开存储 我们知道&#xff0c;C中的成员变量和成员函数均可分为两种&#xff0c;一种是普通的&#xff0c;一种是静态的&#xff0c;对于静态成员变量和静态成员函数&#xff0c;我们知道他们不属于类的对象…

Java基础之网络编程:开启网络通信的神秘之门

一、网络编程概述 网络编程是通过计算机网络进行数据传输和通信的编程技术&#xff0c;在 Java 中&#xff0c;我们可以使用丰富的网络编程功能和 API 来实现不同计算机之间的数据交互。 Java 网络编程是指在 Java 语言中使用网络协议和 API 进行网络通信的编程技术。Java 网络…