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

    你可能感兴趣的文章
    nyoj------203三国志
    查看>>
    NYOJ-525 一道水题
    查看>>
    NYOJ127星际之门(一)
    查看>>
    nyoj58 最少步数
    查看>>
    N皇后问题
    查看>>
    N皇后问题
    查看>>
    n种方式教你用python读写excel等数据文件
    查看>>
    OAuth 2.0 MAC Tokens
    查看>>
    OAuth 及 移动端鉴权调研
    查看>>
    OAuth2 + Gateway统一认证一步步实现(公司项目能直接使用),密码模式&授权码模式
    查看>>
    OAuth2 Provider 项目常见问题解决方案
    查看>>
    OAuth2 vs JWT,到底怎么选?
    查看>>
    Vue.js 学习总结(14)—— Vue3 为什么推荐使用 ref 而不是 reactive
    查看>>
    oauth2-shiro 添加 redis 实现版本
    查看>>
    OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
    查看>>
    OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147
    查看>>
    OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
    查看>>