千家信息网

leetcode中如何实现​统计小于非负数n的素数个数

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,小编给大家分享一下leetcode中如何实现统计小于非负数n的素数个数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!lee
千家信息网最后更新 2024年11月22日leetcode中如何实现​统计小于非负数n的素数个数

小编给大家分享一下leetcode中如何实现统计小于非负数n的素数个数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

leetcode 204.

题目要求:

统计小于非负数n的素数个数。


输入输出示例:

Input: 100

Output: 25

解题思路:

题目比较简单,素数问题也算是各种问题中常见的问题了。首先要明白的一点是,什么是素数?素数又称为质数,指的是在大于1的自然数中,除了1和它本身外不再有因数的数。

最简单的思路是,尝试用n去除2到n-1,发现有整除,可以确认这不是素数。但是这样很费劲有没有?要统计个数,就要把所有的数都算一遍。

再考虑一下,n的因数不可能大于sqrt(n),那么遍历从n到sqrt(n)就够了。但是这样还是很慢,如果n不大还行,如果n很大,运力的消耗将很严重。

再对素数进行分析,从2到n这中间,仍然会存在很多不靠谱的数字,比如4,6,8等等,他们必然能被2整除,也就是说,凡是2-sqrt(n)的整数倍的数字,那肯定不是素数了。首先把偶数排掉,就去掉了一半的数字,以此类推。

所以,建立一个bool类型的数组,用来标记是素数或者不是素数,长度为n+1.并对它进行初始化,0,1设为false,2,3设为true,从4开始,所有偶数设为false,其他设为true。

然后设置一个i从2到sqrt(n)的循环,仍然跳过偶数。接着内层循环对i的倍数进行标记false,当把sqrt(n)也标记完的时候,整个array就完成了,最后统计一遍true的次数,就可以得到结果了。

不过测试之后发现有个bug,当n很大的时候长度会超出限制,但是我现在想不出更好的方法了,谁能解答一下?欢迎讨论。


Java代码的实现:

public class Solution {

public int countPrimes(int n) {

boolean prime[] = new boolean[n+1];

//initial array 排掉偶数,注意开头几个单元的标注

for(int i = 0; i < n+1; i++)

{

if(i == 0 || i == 1)

prime[i] = false;

else if(i < 4)

prime[i] = true;

else if(i % 2 == 0)

prime[i] = false;

else

prime[i] = true;

}

//标记其他单元

for(int i = 3; i < (int)Math.sqrt(n); i += 2)

for(int j = i + i; j < n + 1; j += i)

{

if(prime[j])

{

prime[j] = false;

}

}

int result = 0;

//统计输出结果

for(int i = 1; i < n+1; i++)

{

if(prime[i])

result++;

}

return result;

}

}


以上是"leetcode中如何实现统计小于非负数n的素数个数"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

素数 统计 个数 偶数 标记 负数 数字 篇文章 问题 很大 内容 单元 因数 思路 时候 结果 长度 题目 循环 输出 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全教育校园活动 山东麦贝网络技术 数据库一直安装不上 软件开发5年规划 温州有哪些网络安全科技公司 jeecms 数据库 去哪学习软件开发 数据库接口的调用顺序 东营物流竞价软件开发公司 服务器安全狗装了不能远程 数据库系统最大特点是 天津中科网络技术有限公司 数据库基础教学 数据库转换怎么搞 漳州直播软件开发运营需要多少钱 计算机网络技术答案张建忠 你认为计算机网络技术知识重要吗 王者荣耀语音服务器尚未连接 x8沙箱服务器异常 网络安全实习做什么 为什么象棋不能连接服务器 蔡甸区国际网络安全维护范围 财务软件开发服务费 中建有软件开发的岗位吗 金山区智能网络技术开发行业标准 拉勾网络技术有限公司怎么样 初中生网络安全知识竞赛题库 广东闭门造互联网科技有限公司 华为服务器v5管理口地址 江苏直销软件开发项目管理
0