LeetCode204:Count Primes

news/2023/9/25 17:50:04

Description:

Count the number of prime numbers less than a non-negative number, n.

比计算少n中素数的个数。
素数又称质数,是指仅仅能被1和它自身相除的自然数。

须要注意的是1既不是素数也不是合数。

2是最小的素数。

使用推断一个数是否是素数的函数,那么这个函数须要进行一轮循环,在给定的小于n中又要进行一轮循环。所以时间复杂度是O(n^2)。

能够对推断一个数是否是素数的函数进行优化。对于数i,能够仅仅对2到√i之间的数进行推断。这样时间复杂度减少到了O(nlogn)。

可是上面的解法在leetcode中还是超时。

于是想是否存在仅仅进行一轮循环的方法。即在遍历1至n-1一次的过程中记录下素数的个数。可是后面就不知道怎么处理。

然后看leetcode中的小提示,发现了一种更优的寻找素数的方法。首先看以下的这个图:

这里写图片描写叙述

这个图事实上就道出了这个算法是怎么进行的。使用一个长度是n的hash表,最開始这个hash表中的全部元素都是没有被处理的,从2開始遍历,假设这个元素没有被处理,那么将素数的个数加1,然后将2*2,2*3,2*4……2* k( 2* k < n)标记为已经被处理了的。接着開始处理3,同理将3*2,3*3,3*4…..3*m( 3 * m < n)标记为已被处理了的,接着是4,因为这个元素已经被处理。继续向后遍历。这样一直处理下去。

从这道题中又意识到了一个整数会溢出会导致问题的小技巧。

两种解法分别例如以下:

class Solution {
public:
/*
//解法一:超时int countPrimes(int n) {int count=0;for(int i=2;i<=n;i++){if(isPrime(i))count++;}return count;}bool isPrime(int n){if(n==1)return false;for(int i=2;i*i<=n;i++){if(n%i==0)return false;}return true;}*/
//解法二:int countPrimes(int n) {int * mask=new int[n]();//能够在这里直接对动态数组进行初始化int count=0;for(int i=2;i<n;i++){if(mask[i]==0){count++;for(int j=2;i*j<n;j++)//这里不能将j初始化成i,否则i*j会溢出{mask[i*j]=1;}}}return count;}
};

版权声明:本文博主原创文章,博客,未经同意不得转载。

转载于:https://www.cnblogs.com/zfyouxi/p/4907294.html


https://dhexx.cn/news/show-16746.html

相关文章

exfat 分配单元大小_Golang语言内存管理之内存分配器

上一章中对于golang的并发编程说明如下&#xff1a;1 上下文 Context2 同步原语与锁3 定时器4 Channel5 调度器6 网络轮询器7 系统监控接下来我们来对golang的内存管理进行说明&#xff0c;主要内容有&#xff1a;1 内存分配器2 垃圾收集器3 栈内存管理— — — — — — — —…

基于HTML5 SVG炫酷文字爆炸特效

这是一款使用html5 svg、css3和js制作的炫酷文字爆炸特效。该文字特效用SVG path属性将文字路径切割为很多小块&#xff0c;然后使用css3和js在鼠标滑过文字时制作文字爆炸分裂的炫酷效果。 在线预览 源码下载 这是一款使用html5 svg、css3和js制作的炫酷文字爆炸特效。不论是…

vue foreach用法_手写简易版vue-router

源码地址&#xff1a;传送门vue-router是开发vue项目中必不可少的依赖&#xff0c;为了能更好的理解其实现原理&#xff0c;而源码阅读起来又过于复杂和枯燥&#xff0c;笔者这里实现一个简易版本的vue-rouer&#xff0c;帮助自己来更好的理解源码。其功能如下&#xff1a;通过…

linux 网页注入,Webmin Usermin远程命令注入漏洞(CVE-2014-3883)

发布日期&#xff1a;2014-06-20更新日期&#xff1a;2014-06-23受影响系统&#xff1a;Webmin Webmin < 1.690Webmin Webmin描述&#xff1a;--------------------------------------------------------------------------------BUGTRAQ ID: 68131CVE(CAN) ID: CVE-2014-3…

a标签的下划线怎么去掉_外链是什么,怎么做,外链建设15个最佳技巧

现在的搜索引擎&#xff0c;虽然已经可以处理各种样式的URL&#xff0c;但大家都知道&#xff0c;越简单的东西越容易被处理&#xff0c;搜索引擎也一样&#xff0c;在SEO工作中&#xff0c;外链建设是必不可少的&#xff0c;令人头痛并且至关重要的&#xff0c;下面给出外链建…

[傅里叶变换及其应用学习笔记] 二. 周期性,三角函数表示复杂函数

这份是本人的学习笔记&#xff0c;课程为网易公开课上的斯坦福大学公开课&#xff1a;傅里叶变换及其应用。 这节课目的 如何用像$sin$&#xff0c;$cos$这些简单的函数来表示复杂周期函数。 信号周期化 并不是所有现象都是周期性的&#xff0c;而且即使是周期性的现象&#xf…

boost asio linux原理,BOOST.ASIO源码剖析(二) ---- 架构浅析

架构浅析先来看一下asio的0层的组件图。(图1.0)io_object是I/O对象的集合&#xff0c;其中包含大家所熟悉的socket、deadline_timer等对象&#xff0c;主要功能是提供接口给用户使用。services服务是逻辑功能的实现者&#xff0c;其中包含提供定时功能的deadline_timer_service…

3500个常用汉字表_中考语文常用汉字3500(一)你知道的有多少?

中考语文3500常用汉字七年级上课文篇目 需掌握的字 正确读音 课文篇目 需掌握的字 正确读音为你打开一扇门 憧憬 chōng jǐng 十三岁的际遇 白驹过隙 jū x 裨益 b 蓦然 m 广袤 mo 积攒 zǎn 跌宕 dng 安恬 tin 诠释 qun 樯橹 qing 真谛 d 惆怅 chuchng 繁星 半明半昧 mi 伟人…

Linux异常aborted定位方法,C++异常的几种捕获方式

捕获指定的类型这样的话可以对每种异常做出不同的处理&#xff0c;例如&#xff1a;#include using namespace std;void A(int n){int a 1;float b 0.2;double c 0.3;if(n 1)throw a;else if(n 2)throw b;else if(n 3)throw c;}int main(){int test;while(cin >> t…

python minimize_同义词词向量训练python实现

Boblee人工智能硕士毕业&#xff0c;擅长及爱好python&#xff0c;基于python研究人工智能、群体智能、区块链等技术&#xff0c;并使用python开发前后端、爬虫等。本文基于https://zhuanlan.zhihu.com/p/28979653进行修改。word2vec简要介绍word2vec 是 Google 于 2013 年开源…