博客
关于我
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/

    你可能感兴趣的文章
    nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:128
    查看>>
    nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in usrlocalnginxconfnginx.conf128
    查看>>
    nginx日志分割并定期删除
    查看>>
    Nginx日志分析系统---ElasticStack(ELK)工作笔记001
    查看>>
    Nginx映射本地json文件,配置解决浏览器跨域问题,提供前端get请求模拟数据
    查看>>
    nginx最最最详细教程来了
    查看>>
    Nginx服务器---正向代理
    查看>>
    Nginx服务器上安装SSL证书
    查看>>
    Nginx服务器的安装
    查看>>
    Nginx模块 ngx_http_limit_conn_module 限制连接数
    查看>>
    nginx添加模块与https支持
    查看>>
    Nginx用户认证
    查看>>
    Nginx的location匹配规则的关键问题详解
    查看>>
    Nginx的Rewrite正则表达式,匹配非某单词
    查看>>
    Nginx的使用总结(一)
    查看>>
    Nginx的使用总结(三)
    查看>>
    Nginx的使用总结(二)
    查看>>
    Nginx的可视化神器nginx-gui的下载配置和使用
    查看>>
    Nginx的是什么?干什么用的?
    查看>>
    Nginx访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>