【leetcode】计数质数 - 埃拉托斯特尼筛法

相关资料以及注意事项:

算法介绍

要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。


算法过程

   for (int i = 0; i < n; i++) {
            arr[i] = true;
        }

        arr[0] = false;
        int count = 0;
        int limit = (int) Math.sqrt(n);
        // 埃拉托斯特尼筛法
        for (int i = 2; i <= limit; i++) {
            if (arr[i - 1]) {
                // 把能被整除的数字标识出来
                for (int j = i * i; j < n; j += i) {
                    arr[j - 1] = false;
                }
            }
        }
  1. 首先建立一个布尔表arr,全部标记为True,然后开始进行剔除。
  2. 只需要计算2到n的开方之内的素数即可。
  3. 假如arr标记的为素数,就开始进行剔除。
  4. j的起始点为 i * i,因为i*1 ——> i * (i -1)在之前的(i-1)*i循环里已经剔除过了。
  5. 开始剔除,因为对应的数字是大于等于1的正整数,所以标记arr[j-1]即可。同理之前判断的a[i-1]。
  6. 循环完毕后,剩下标记为True的即为素数。

总结心得

妙啊,真是妙啊!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    开心的锣鼓阅读 3,395评论 0 9
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一...
    阿里高级软件架构师阅读 3,390评论 0 19
  • 各校历年复试机试试题 清华、北大、华科试题详细笔记部分,少笔记部分与少数leetcode【含个人整理笔记】 一、详...
    AIM外星人阅读 1,333评论 0 1
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 4,045评论 0 2
  • 上午十一点三十八分 我坐在单位的台阶上 阳光正好洒在我的脸上 暖暖的 犹如那年夏天 你的拥抱 安静 踏实 我是个感...
    一朵自由行走的花hh阅读 268评论 0 1

友情链接更多精彩内容