初阶OI素数算法——埃拉托尼斯筛

简介: 时间复杂度比较优秀且易于理解的素数筛选法

埃拉托尼斯筛

  • 前言
    在探究埃拉托尼斯筛之前,让我们先回顾一下线性筛选素数的方法。
    如果有数a为合数,那么一定存在素数x|a,且x^2<=a。
    代码如下:
    bool prime_judge(int x);
      for(int i=2;i*i<=x;i++) //这种写法相比于i<=sqrt(x)可以省去一些不必要的麻烦 
          if(x%i==0) return 0;
      return 1;
    
  • 埃拉托尼斯筛的实现
    void fine_prime(int n,bool a[]){
      //引入的数组应是一个全局的,故不需要初始化,当然初始化也没问题
      //1为素数,0为合数
      a[0]=a[1]=1;//1和0是素数
      for(int i=2;i*i<=n;i++){//0和1不用讨论了 节省时间复杂度 
          if(a[i]==0)
              for(int j=i*2;j<=n;j+=i)
                  a[j]=1;//直接筛去i的倍数 
      } 
    }
    
目录
相关文章
|
算法 搜索推荐 程序员
初阶算法(1):通过简单的排序算法来认识时间复杂度
初阶算法(1):通过简单的排序算法来认识时间复杂度
|
6月前
|
机器学习/深度学习 算法 搜索推荐
【初阶算法4】——归并排序的详解,及其归并排序的扩展
【初阶算法4】——归并排序的详解,及其归并排序的扩展
【初阶算法4】——归并排序的详解,及其归并排序的扩展
|
4月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
48 0
|
6月前
|
算法 Serverless 数据安全/隐私保护
RSA算法中,为什么需要的是两个素数?
PrimiHub是密码学专家团队开发的开源隐私计算平台,关注数据安全、密码学等领域。RSA算法使用两个素数确保安全,因为它们的乘积易于计算,但分解困难,形成加密基础。算法涉及选择大素数、计算乘积、生成公私钥对。加密时,消息通过公钥变形;解密则需私钥,安全性依赖于大数分解问题的复杂性。
|
存储 算法 C语言
二叉树的概念和性质/向上调整、向下调整算法/堆的插入和删除/堆排序/Top-K问题【上】【数据结构/二叉树/初阶/C语言实现】
二叉树的概念和性质/向上调整、向下调整算法/堆的插入和删除/堆排序/Top-K问题【上】【数据结构/二叉树/初阶/C语言实现】
79 0
|
7月前
|
机器学习/深度学习 存储 算法
初阶数据结构之---导论,算法时间复杂度和空间复杂度(C语言)
初阶数据结构之---导论,算法时间复杂度和空间复杂度(C语言)
宝藏例题(欧几里得算法+素数的三种境界………)
宝藏例题(欧几里得算法+素数的三种境界………)
宝藏例题(欧几里得算法+素数的三种境界………)
|
存储 算法 Python
信息学奥赛 试除法:高效筛选素数的算法
本文介绍了在Python代码中如何使用试除法高效筛选素数。
138 0
|
存储 算法
【数据结构初阶】第七篇——二叉树的顺序结构及实现(堆的向下,向上调整算法)
【数据结构初阶】第七篇——二叉树的顺序结构及实现(堆的向下,向上调整算法)
【数据结构初阶】第七篇——二叉树的顺序结构及实现(堆的向下,向上调整算法)
|
7月前
|
机器学习/深度学习 存储 算法
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
102 0
下一篇
DataWorks