用"埃拉托色尼筛"求质数

原创 2007年09月19日 20:37:00

       该算法一开始初始化一个2~n的连续整数序列,作为候选质数.然后,在算法的第一个循环中,它将类似4和6这

样的2的倍数从序列中消去.然后,它指向列表中的下一数字-3,对将其倍数消去.该算法以这个方式不断做下

去,直到序列中已经没有可消的元素为止.
          需要注意的是,如果当前步骤中,我们正在消去p的倍数,那么第一个值得考虑的倍数是p*p,因为其他更小的倍

数2p,……,(p-1)*p已经在先前的步骤中从序列里消去了.了解这个事实可以帮助我们避免多次消去相同的数

字.显然,p*p不会大于n,p也不会大于根号n向下取整的值.

算法:
int Sieve(int a[],int n)   //返回2~n中质数的个数,质数存放在数组a中
{  //实现"埃拉托色尼的筛子"
 int p,i,j;
 for(p=2;p<=n;p++)
  a[p]=p;
 for(p=2;p<=sqrt(n);p++)
 {
  if(a[p])      //没有被前面的步骤消去
  {
   j=p*p;
   while(j<=n)
   {
    a[j]=0;   //将该元素标记为已经消去
    j+=p;
   }
  }
 }
 i=0;
 for(p=2;p<=n;p++)
 {
  if(a[p])
  {
   a[i]=a[p];
   i++;
  }
 }
 return i;
}

埃拉托色尼筛选法

最近在复习算法,求素数是一个很常用的算法。不禁引发了我的一些思考。     想到大一的时候用暴力枚举法求素数了,埃式筛选法求素数是一个比较好的算法。     在网上看了一下,没有把这个算法讲的比较...
  • luoshengkim
  • luoshengkim
  • 2015年03月25日 19:46
  • 2720

找质数算法之埃拉托色尼筛选法(Sieve of Eratosthenes算法)

一、算法原理 一个合数总是可以分解成若干个质数的乘积,那么如果把质数(最初只知道2是质数)的倍数都去掉,那么剩下的就是质数了。 二、步骤 (1)先把1删除(1既不是质数也不是合数) (2)...
  • xiaoquantouer
  • xiaoquantouer
  • 2016年07月03日 23:51
  • 2961

素数个数统计 使用位运算优化的 埃拉托色尼筛选法

埃拉托色尼筛选法的 时间 空间 高度优化埃拉托色尼筛选法很常见了,直接上代码#include #include#define MAX 2147483648 #define X (MAX/2+1) #d...
  • c_duoduo
  • c_duoduo
  • 2015年10月11日 12:11
  • 1673

埃拉托色尼素数筛法

1.算法原理 埃拉托色尼素数筛法是有古希腊数学家发明的一种快速求解范围内所有的素数的算法 在我们讲解埃拉托色尼素数筛法之前,我们需要了解一下朴素的求素数的算法的工作原理 首先: 对于朴素的求素数的...
  • ltyqljhwcm
  • ltyqljhwcm
  • 2016年10月17日 13:12
  • 1499

埃拉托色尼筛选法python实现

埃拉托色尼筛选法求一定范围内自然数中的素数: 1、首先取得大于2的所有自然数的数列。 2、在数列中去掉所有大于2并且可以被2整除的数字,得到新数列。 3、在新数列中去掉所有比第一位大但是可以被第一位数...
  • streetballerym
  • streetballerym
  • 2015年10月09日 00:04
  • 714

埃拉托色尼筛算法

功能:用来产生一个不大于给定整数n的连续质数序列算法 Sieve(n)//实现“埃拉托色尼的筛子”//输入:一个正整数≥2//输出:包含所有小于等于n的质数的数组Lfor p←2 to n do A[...
  • qf_study
  • qf_study
  • 2008年02月26日 22:08
  • 410

埃拉托色尼选筛法

埃拉托色尼选筛法: (1)先把1删除(现今数学界1既不是质数也不是合数) (2)读取队列中当前最小的数2,然后把2的倍数删去 (3)读取队列中当前最小的数3,然后把3的倍数删去 ...
  • chinabhlt
  • chinabhlt
  • 2015年05月28日 23:06
  • 880

埃拉托色尼筛子

埃拉托色尼的筛子
  • shaonianpiaofei
  • shaonianpiaofei
  • 2016年01月04日 16:51
  • 193

质数筛选方法(埃拉托斯特尼筛法)

今天刷题刷了这么一道题, The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. Find the sum of all the primes...
  • jiang111_111shan
  • jiang111_111shan
  • 2015年07月10日 20:59
  • 2431

素数筛选法之埃拉托色尼筛

埃拉托色尼筛选法 下面求1-100的所有素数 Codes 1: #include #include #define true 1 #define false 0 int main() { ...
  • TTchengcheng
  • TTchengcheng
  • 2015年12月01日 17:07
  • 455
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用"埃拉托色尼筛"求质数
举报原因:
原因补充:

(最多只允许输入30个字)