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

    你可能感兴趣的文章
    PHP 截取字符串乱码的解决方案
    查看>>
    php 接口类与抽象类的实际作用
    查看>>
    PHP 插入排序 -- 折半查找
    查看>>
    PHP 支持8种基本的数据类型
    查看>>
    php 放大镜,放大镜放大图片效果
    查看>>
    php 数据库 表格数据,php数据库到excel表格-php怎么把数据库数据放到表格里
    查看>>
    PHP 数据库连接池实现
    查看>>
    php 数组 区别,PHP中数组的区别
    查看>>
    PHP 数组怎么添加一个元素
    查看>>
    PHP 文件上传
    查看>>
    PHP 文件操作
    查看>>
    php 文字弹幕效果代码,HTML5文字弹幕效果
    查看>>
    php 时间日期函数,获取今天开始时间,结束时间
    查看>>
    PHP 构造函数的重载
    查看>>
    php 标准规范
    查看>>
    PHP 浮点型精度运算相关问题
    查看>>
    php 浮点型计算精度问题
    查看>>
    php 特定时间段统计,jpgraph某个时间段的数据统计
    查看>>
    php 生成csv mac下乱码
    查看>>
    php 生成证书 签名及验签
    查看>>