当前位置: 首页 > news >正文

【算法】筛质数

目录

  • 埃氏筛法
    • 算法原理
    • 代码
  • 欧拉筛法
    • 算法原理
    • 代码

埃氏筛法

算法原理

算法思想就像"筛子"一样,把合数筛掉,剩下的就是质数:

  1. 从2开始,依次检查每个数
  2. 如果当前数未被标记为合数,它就是质数
  3. 然后把这个质数的所有倍数都标记为合数
  4. 重复这个过程直到检查完所有数

注意:从i²开始标记:对于质数i,比i²小的倍数(如i×2, i×3,…, i×(i-1))已经被更小的质数标记过了,所以可以从i²开始。
在这里插入图片描述

代码

#include <iostream>
using namespace std;


typedef long long LL;
const int N = 1e6+10;
int check[N];     //真为合数 -- 被划掉的数
int prim[N];    //记录质数
int cnt = 0;        //质数个数


void aishishai(int n)
{
    for(LL i = 2;i<=n;i++)
    {
        //没被划掉
        if(!check[i])
        {
            prim[++cnt] = i;
            for(LL j = i*i;j<=n;j+=i)
                check[j] = 1;
        }
        
    }
}

int main()
{
    int n;cin >> n;
    aishishai(n);
    cout << cnt;
    
    return 0;
}

欧拉筛法

算法原理

从小到大枚举每个数

  • 如果当前数没划掉,记录该质数
  • 枚举已经记录的质数(如果合数已越界则中断)
    • 合数未越界,则划掉合数
    • 条件i%p == 0,保证合数只被最小质因子划掉
      • 若i是质数,则最多枚举到自身中断
      • 若i是合数,则最多枚举到自身的最小质因子中断

在这里插入图片描述

代码

#include <iostream>
using namespace std;


typedef long long LL;
const int N = 1e6+10;
int check[N];     //真为合数 -- 被划掉的数
int prim[N];    //记录质数
int cnt = 0;        //质数个数

//欧拉筛
void get_prim(int n)
{
    for(int i  = 2;i<=n;i++)
    {
        if(!check[i]) prim[++cnt] = i;
        for(int j =1;1ll * i*prim[j] <=n;j++) //越界中断
        {
            check[i*prim[j]] = 1;
            if(i%prim[j] == 0) break;//整除中断
        }
    }
}

int main()
{
    int n;cin >> n;
    get_prim(n);
    cout << cnt;
    
    return 0;
}

相关文章:

  • FlashDB移植
  • Redis 热key问题怎么解决?
  • 计算机毕业设计指南
  • 开发指南111-关闭所有打开的子窗口
  • Spring 中有哪些设计模式?
  • python入门之从安装python及vscode开始
  • 功耗日志抓取需求
  • (六)安卓开发中的Activity的启动、关闭和生命周期详解
  • 目录遍历(Directory traversal)漏洞总结
  • keepalived高可用介绍
  • VLAN(虚拟局域网)
  • 机器学习之数据预处理(一):缺失值处理和异常值识别的几种常用方法
  • ER-图,详情和画法
  • Windows操作系统安全配置(一)
  • 关于计算机网络的一些疑问
  • 新一代AI架构实践:数字大脑AI+智能调度MCP+领域执行APP的黄金金字塔体系
  • 批量将 Markdown 转换为 Word/PDF 等其它格式
  • react和vue在开发使用的语法上面有什么区别?
  • 自动微分模块
  • SpringSecurity框架入门
  • dw做的网站要多大/微信卖货小程序怎么做
  • 做房产必知的发布房源网站/百度账号官网
  • 网站建设的商业计划书/知识营销
  • 营销网站优点/推广运营
  • 公安网站制作/百度站长工具排名
  • 做兼职的网站都有哪些工作/百度竞价排名规则