LeetCode:Count Primes

Problem:

Description:

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

Credits:
Special thanks to @mithmatt for adding this problem and creating all test cases.

Solution:采用的为埃拉托斯特尼筛法 

算法描述:(来自百度百科)

要得到自然数n以内的全部素数,必须把不大于
的所有素数的倍数剔除,剩下的就是素数。
给出要筛数值的范围n,找出以内的素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的吧倍数剔除掉;不断重复下去......。
步骤
详细列出算法如下:
  1. 列出2以后的所有序列:
  • 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
标出序列中的第一个素数,也就是2,序列变成:
  • 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
将剩下序列中,划掉2的倍数,序列变成:
  • 2 3 5 7 9 11 13 15 17 19 21 23 25
如果现在这个序列中最大数小于最后一个标出的素数的平方,那么剩下的序列中所有的数都是素数,否则回到第二步。
本例中,因为25大于2的平方,我们返回第二步:
剩下的序列中第一个素数是3,将主序列中3的倍数划掉,主序列变成:
  • 2 3 5 7 11 13 17 19 23 25
我们得到的素数有:2,3
25仍然大于3的平方,所以我们还要返回第二步:
现在序列中第一个素数是5,同样将序列中5的倍数划掉,主序列成了:
  • 2 3 5 7 11 13 17 19 23
我们得到的素数有:2,3,5 。
因为23小于5的平方,跳出循环.
结论:2到25之间的素数是:2 3 5 7 11 13 17 19 23。
class Solution {
public:int countPrimes(int n) {vector<bool> flags(n-1,true);flags[0]=false;int res;int limit=sqrt(n);for(int i=2;i<=limit;i++){if(flags[i-1]){for(int j=i*i;j<n;j+=i){flags[j-1]=false;}}}for (int j = 0; j < n-1; ++j) {if (flags[j]) ++res;}return res;}
};

 

转载于:https://www.cnblogs.com/xiaoying1245970347/p/4581896.html

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

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

相关文章

华为交换机查看端口流量_华为交换机限速及流量统计配置

配置交换机限速时&#xff0c;cir和cbs的关系是什么配置交换机限速时&#xff0c;cir和cbs的关系如下&#xff1a;cbs要大于报文的最大长度。在连续流量的情况下对于cbs没有特殊的要求&#xff0c;保证平均速率是cir的速率。在突发流量需要保证的情况下&#xff0c;如果cbs换算…

利用Matlab拟合时序植被生长季曲线,并求解物候参数

研究表明,一元六次曲线比一元二次曲线更好地模拟植被生长季的整个生长周期,表征植被的生长特性。matlab软件功能强大,在遥感模型研究方面有很大的优势特点,对数学模型模拟轻而易举,也可直接对栅格数据进行运算。因此本文采用matlab软件,采用一元6次曲线来拟合植被生长季曲…

sql between...and 用法(mysql)

首先我们看如下数据库表&#xff1a; 如果我们想查询如上表中的age1的值在0到5的数据该如何查询&#xff1f; 那么在这里我们用到我们的sql操作符between…adn。 SELECT * FROM table1 WHERE age1 BETWEEN 0 AND 5 其中between后面的0 and 5 意思就是 查询寻数据&#xf…

轻松搞定各版本IE兼容问题,IE6,IE7,IE8,IE9,IE10,IE11

轻松搞定各版本IE兼容问题,IE6,IE7,IE8,IE9,IE10,IE11 在网站开发中不免因为各种兼容问题苦恼&#xff0c;针对兼容问题&#xff0c;其实IE给出了解决方案,Google也给出了解决方案,百度也应用了这种方案去解决IE的兼容问题。解决这种兼容问题只需要一行代码就可以了&#xff0c…

linux shell之通过标识测试文件系统属性

1 通过标识测试文件系统属性 [ -f $file_var ] :如果给定的变量包含正常的文件路径或文件名,则返回真。 [ -x $var ] :如果给定的变量包含的文件可执行,则返回真。 [ -d $var ] :如果给定的变量包含的是目录,则返回真。 [ -e $var ] :如果给定的变量包含的文件存在,则返回真。…

python中变量类型在程序中可以改变_详细解析Python当中的数据类型和变量

数据类型计算机顾名思义就是可以做数学计算的机器&#xff0c;因此&#xff0c;计算机程序理所当然地可以处理各种数值。但是&#xff0c;计算机能处理的远不止数值&#xff0c;还可以处理文本、图形、音频、视频、网页等各种各样的数据&#xff0c;不同的数据&#xff0c;需要…

php输出二维数组中指定内容,HP将MYSQL内容读到二维数组并按指定列输出

&#xff1c;?$host "localhost"; //主机名$user "root"; //mysql用户名$password ""; //mysql密码$database "doc"; //mysql数据库名$tables "mclass"; //表名$connmysql_connect("$host",&…

利用Excel VBA批量计算长时间序列植被物候动态阈值(逐像元)

本文演示利用Excel VBA编程实现多期栅格数据,逐像元计算物候参数:生长季始期(SOS)、生长季末期(EOS)和生长季长度(LOS),计算过程速度快! 说明: (1)利用Raster to Point工具将栅格数据转换为点图层,结果为38998个点,由于每年有24个数据(半月合成),所以得到的…

linux shell之字符串的比较

1 字符串常用的比较 字符串相等 [[ $str1 $str2 ]] 字符串不相等 [[ $str1 ! $str2 ]] 字符串大小比较 [[ $str1 > $str2 ]] 字符串等于空 [[ -z $str2 ]] 字符串不等于空 [[ -n $str2 ]] 用test代替[] if test $str1 $str2 2 测试代码 #/bin/bashstr1&quo…

如何在JavaScript中运行.NET Core代码

前言在.NET Core中运行JavaScript代码&#xff0c;目前已经有很多实现方案。但是&#xff0c;如果你希望在纯JavaScript环境中运行.NET Core代码呢&#xff1f;那么&#xff0c;DotNetJS可能对你有所帮助。DotNetJSDotNetJS可以将C#项目编译为与任何环境兼容的单文件JavaScript…

表联接

表1&#xff1a;teacher------------| id | name |------------| 1 | 刘德华 || 2 | 张学友 || 4 | 黎明 |------------表2&#xff1a;student------------------| id | name | tea_id |------------------| 1 | 张三 | 1 || 2 | 李四 | 1 || 3 | 王五 | …

sql 之as(Aliases)别名(mysql)

使用别名主要原因是因为如果在很多表的时候&#xff0c;我们的表名可能会混淆&#xff0c;导致语句不清晰&#xff0c;那么我们使用别名就可以让我们操作数据库表的时候更加清晰明了&#xff0c;那么我们假设有如下表&#xff1a; 那么我们查找我们age1的值为11的数据&#…

C语言发展史(The development of the C language)-BCPL、B与C【转】

The Development of the C Language*Dennis M. RitchieBell Labs/Lucent TechnologiesMurray Hill, NJ 07974 USA 概要在1970s早期&#xff0c;C编程语言是作为新生的Unix操作系统的系统实现语言而设计的。衍生于无类型(typeless)语言BCPL&#xff0c;它进化出了一个类型结构【…

linux shell之find高级点的用法

1 查找当前目录a.txt和b.txt文件,下面的o是or的意思, -iname是忽略大小写的意思(-o -iname) find . -iname a.txt -o -iname b.txt 2 查找当前目录下的除了a.txt的文件(!) find . ! -iname "a.txt" 3 查看当前目前下的目录(-type d) find . -type d 4 查看当前目…

Java Eclipse开发环境搭建及注意事项

一、所需工具 (1)JDK(http://www.oracle.com/technetwork/java/javase/downloads/index.html) (2)Tomcat 7.0(http://tomcat.apache.org/download-70.cgi,选择: 32-bit/64-bit Windows Service Installer (pgp,

基于.NetCore开发博客项目 StarBlog - (3) 模型设计

系列文章基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客&#xff1f;基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目基于.NetCore开发博客项目 StarBlog - (3) 模型设计...基于.NetCore开发博客项目 StarBlog - 接口返回值包装基于.NetCore开…

matlab读取文件夹下所有文件的字符串,MATLAB读取文件夹下所有文件的文件名并读取数据...

MATLAB读取文件夹下特定类型格式文件的文件名并读取该格式文件的数据利用代码对大量数据进行自动批处理时&#xff0c;首先需要获取该数据存放的文件夹(文件夹路径)&#xff0c;然后获取该文件夹下某一类型数据所有的文件名&#xff0c;最后通过特定的数据读取代码读取数据进行…

sqlserver建表语句_重新认识MySQL中的COUNT语句

在数据库的增删改查操作中&#xff0c;使用最频繁的就是查询操作。而在所有查询操作中&#xff0c;统计数量操作更是经常被用到。关于数据库中行数统计&#xff0c;无论是MySQL还是Oracle亦或者是SqlServer&#xff0c;都有一个函数可以使用&#xff0c;那就是COUNT。而对于COU…

显示学生各科成绩和总成绩-面试被问到

表结构如下&#xff1a; name schedule score 张三 语文 20张三 数学 60张三 英语 80李四 数学 30李四 英语 60李四 语文 80 想要的结果如下&#xff1a; 姓名 语文 数学 英语 总成绩 …

sql INNER JOIN 取得两个表中存在连接匹配关系的记录(mysql)

首先&#xff1a;JOIN 通常与 ON 关键字搭配使用 其次我们来看我们的两个表格&#xff1a; table1: table2: 在这里&#xff0c;INNER JOIN&#xff08;内连接,或等值连接&#xff09;&#xff1a;取得两个表中存在连接匹配关系的记录。 例如我要取到table1和table2之…