博客
关于我
leetCode 204 计数质数(埃氏筛法)
阅读量:271 次
发布时间:2019-03-01

本文共 788 字,大约阅读时间需要 2 分钟。

埃氏筛法(素数筛)是一种高效地找出小于给定数字n的质数的方法。其原理是从2到n逐个检查每个数,假设当前遍历的数m是质数,那么将所有小于n的且是m倍数的数标记为非质数。遍历完成后,未被标记的数即为质数。

代码优化

int countPrimes(int n) {    if (n <= 2) return 0;    bool* prime = new bool[n + 1];    memset(prime, true, sizeof(bool) * (n + 1));    prime[0] = prime[1] = false;    for (int i = 2; i * i <= n; ++i) {        if (prime[i]) {            for (int j = i * i; j <= n; j += i) {                prime[j] = false;            }        }    }    int count = 0;    for (int i = 2; i <= n; ++i) {        if (prime[i]) ++count;    }    delete[] prime;    return count;}

优化说明

  • 减少循环次数:埃氏筛法的核心在于标记合数。通过从i=2开始遍历到sqrt(n),只处理可能的质因数,减少了循环次数。

  • 平方优化:从i=2开始遍历到sqrt(n),后面的数已经被处理过,因此减少了循环次数。

  • 只处理奇数:除了2以外,偶数都不是质数,因此可以从i=3开始,只处理奇数,进一步减少循环次数。

  • 直接计算质数个数:遍历数组时直接统计质数个数,避免了重复处理,提高了效率。

  • 通过这些优化,代码不仅更高效,而且代码结构更清晰,易于维护。

    转载地址:http://oxlx.baihongyu.com/

    你可能感兴趣的文章
    python 函数1
    查看>>
    python 函数学习
    查看>>
    Python 函数随笔 map()函数,lambda自定义函数
    查看>>
    Python 分析天气,告诉你中秋应该去哪里
    查看>>
    python 列表中dict中key排序
    查看>>
    python 列表函数
    查看>>
    Python 列表删除相同的元素
    查看>>
    python 列表生成式
    查看>>
    Python 列表解析 大文件
    查看>>
    python 列表转字典方法
    查看>>
    Python 列表(List)概述-ChatGPT4o作答
    查看>>
    Python网络爬虫基础进阶到实战教程
    查看>>
    Python 初学者需要知道的四条建议
    查看>>
    Python 判断字符串是否包含子字符串
    查看>>
    python 判断当前时间是否为零点
    查看>>
    python 利用pandas读取本地中CSV文件的指定列 列名重命名 并保存回本地
    查看>>
    python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
    查看>>
    python 利用pyttsx3文字转语音
    查看>>
    python 利用已有Ner模型进行数据清洗合并
    查看>>
    python 到大数据开发工程师_如何成为一个大数据开发工程师?
    查看>>