`

埃拉托色尼(Eratosthenes)选筛法

 
阅读更多

简介

  埃拉托色尼选筛法(the Sieve of Eratosthenes)简称埃氏筛法,是古希腊数学家埃拉托色尼(Eratosthenes)提出的一种筛选法。 是针对自然数列中的自然数而实施的,它的容斥原理之完备性条件是p=H~。

步骤

  (1)先把1删除(因为1不是质数)(2)把2留下(最小的偶数质数),然后把2的倍数删去

  (3)把3留下,然后把3的倍数删去

  (4)把5留下,然后把5的倍数删去

  (5)....继续进行下去,直到把所有数要么留下,要么删除。(所有偶数被删去)

如图:

1


eratosthenes筛选法的c语言实现(不是最优解,容易看懂)

  #include <stdio.h>
  #define TRUE 1
  #define FALSE 0
  #define SIZE 1000000
  int main()
  
    {
      int i; /*i表示整数和对应的下标*/
      int j; /*j表示正要处理的质数j之前的已处理j之后的未处理*/
      int k; /*k表示正在处理的j的倍数从2开始到j*k<SIZE*/
      int a[SIZE]; /*下标表示整数内容判断是否为质数*/
      int *p; /*控制循环*/
      for(p = a; p < a + SIZE; ++p) /*初始化数组全是TRUE*/
        {
          *p = TRUE;
          
        }
      a[0] = a[1] = FALSE; /*设置前面两个不是质数的数的状态为FALSE*/
      i = 2;
      for(p = a; p < a + SIZE; ++p)
        {
          while(i < SIZE)   /*找到下一个质数*/
            {
              if(a[i++] == TRUE)
                {
                  j = i - 1;
                  break;
                  
                }
              
            }
          for(k = 2; j * k < SIZE && i < SIZE; ++k) /*处理质数的倍数*/
            {
              a[j *k] = FALSE;
              
            }
          
        }
      for(p = a; p < a + SIZE; ++p) /*打印出质数*/
        {
          if(*p == TRUE)
            {
              printf("%8d", p - a);
              
            }
          
        }
      printf("/n");
      return 0;
      
    }



分享到:
评论

相关推荐

    (素数)埃拉托色尼筛

    可以批量求出 大范围内的 素数。这个算法有点复杂。想要最好的可以去我的资料中 找另外一个。反正都是免费的~

    埃拉托色尼示例代码

    埃拉托色尼素数筛选法,也称为埃拉托斯特尼筛法,是一种古老而有效的算法,用于找出一个给定范围内的所有素数。该方法由古希腊数学家埃拉托色尼提出,通过一系列的排除过程,可以有效地找到所有小于给定数的素数。...

    erathostenes:埃拉托色尼的筛子-matlab开发

    该程序的灵感来自艺术品: Sieb des Eratosthenes(Eratosthenes 的筛子)(1971 年)来自 Rune Mields(德国画家,1935 年生) 这幅来自她的 9 幅面板艺术作品的作品将素数显示为白点。 左栏显示89栏排列的数字,...

    Eratostene:以埃拉托色尼筛法的形式显示素数-开源

    素数也可以用六列​​的埃拉托色尼筛法来形象化。 筛子是在 Html 中创建的,可以将它保存在一个文件中,以便在程序关闭后也可以用任何其他浏览器打开它。 如果浏览器支持 JavaScript,点击它应该可以显示非质数的...

    Eratosthenes:用于AIDE github访问测试。既然是样品,我会尽量用“埃拉托色尼筛”做

    一种应用“Eratosthenes 筛法”来查找和显示由开始和结束指定的整数之间的素数的算法。 在显示的末尾,添加找到了多少个素数(计数)以及找到它们所需的时间(时间)。 这是一个我刚刚玩过的应用程序,试图在 ...

    MyPrime:埃拉托色尼筛

    在这个示例中,`sieveOfEratosthenes`函数实现了埃拉托色尼筛法,`MainActivity`类则负责UI交互。用户输入的数字范围会传递给该函数,然后返回的结果会在界面上展示。 为了提高性能,我们通常只筛选到平方根最大数...

    素数筛选法的改进及C语言实现.pdf

    埃拉托色尼筛法(Sieve of Eratosthenes)是一种古老且高效的算法,用于找出小于或等于给定数N的所有素数。该方法首先将1到N的整数列表中的所有数字视为可能的素数,然后从2开始,对于每一个已知的素数,将其所有的...

    11.埃拉托色尼筛选法求500以内的素数.cpp

    11.埃拉托色尼筛选法求500以内的素数.cpp

    soe:埃拉托色尼筛法的实现

    还记得小学数学老师布置的家庭作业问题,您必须确定某个五位数是否为质数? 您可能用来完成该作业的算法称为试算,而且速度很慢。 在确定小于足够大整数的所有素数时,即使是计算机也需要一段时间才能使用此算法。...

    算法课设--求素数问题

    求素数问题。埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有小于N的素数的方法。从建立一个整数2~N的表着手,寻找i˂的整数,编程实现此算法,并讨论运算时间。

    java笔试题算法-sieve:用各种语言实现Eratosthenes筛以展示GraalVM和Truffle的强大功能

    java笔试题算法多种语言的埃拉托色尼筛子 以各种语言实现 Eratosthenes 筛以展示 GraalVM 和 Truffle 的强大功能。 请先下载后再进行实验。 已经过测试可以与版本19.3.1 。 Ruby速度 使用以下命令可以发现 GraalVM ...

    sieveofEratosthenesExample.zip

    **埃拉托色尼筛选法(Sieve of Eratosthenes)是古代数学家埃拉托色尼提出的一种寻找素数的有效算法。这个方法基于一个简单原理:从2开始,将所有能被2整除的数标记为合数,然后从下一个未标记的数3开始,将所有它的...

    SieveOfEratosthenes:一个 android 应用程序,用户可以输入一个大于 1 的数字并找到 2 和该数字之间的所有质数

    **埃拉托色尼筛法(Sieve of Eratosthenes)** 埃拉托色尼筛法是一种古老的算法,用于寻找一定范围内所有的质数。这个算法的基本思想是通过逐步排除合数(非质数)来找出质数。具体步骤如下: 1. 创建一个包含从2...

    12.zip_图形图像处理_C/C++_

    标题中提到的“12.zip_图形图像处理_C/C++_”虽然在字面上让人联想到包含图形图像处理技术的C/C++源代码文件压缩包,但根据描述中的内容“埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有小于N的素数的...

    prime-numbers-scss::input_numbers::sparkles: 仅使用 SCSS 查找素数

    埃拉托色尼筛在eratosthenes.scss文件中实现。 运行此代码后,将创建primes列表。 对于素数,相应索引的值(从 1 开始)将为true 。 这个算法不是最优的。 在 SCSS 中,您不能用索引替换列表元素。 为了解决这个问题...

    【数论基础】判断素数、埃拉托色尼筛选法、欧几里得算法、反复平方法

    快速筛选素数:埃拉托色尼筛选法 只有一行的算法:欧几里得算法求解最大公约数 求幂乘:反复平法法 筛选素数 小学的知识点,不解释了; bool isPrime(int d){//判断是否是素数 if(d==2) return true; if(d&lt;2|...

    c++素数筛选法

    C++中的素数筛选法,也称为埃拉托斯特尼筛法,是一种高效寻找一定范围内所有素数的方法。这个算法的基本思想是通过一系列的排除步骤,确定并输出那些仅能被1和自身整除的自然数,即素数。埃拉托斯特尼筛法的名字来源...

    埃拉托色尼筛选素数.cpp

    埃拉托色尼法筛选素数

    Sieve-of-Eratosthenes:Android 编程挑战

    埃拉托色尼筛 Android 实习编码挑战 描述 在我的代码中,我使用以下三行来禁用此应用程序的横向模式: getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setRequestedOrientation...

Global site tag (gtag.js) - Google Analytics