经典算法——埃拉托斯特尼筛法

原创 2006年04月13日 22:30:00

一、算法创始人介绍:

埃拉托斯特尼(公元前276—公元前194

埃拉托斯特尼是古希腊著名的数学家、地理学家、天文学家。他先在亚历山大港学习,后又转至雅典。公元前236年,托勒密三世指定他为亚历山大图书馆的图书管理员和馆长。他跟阿基米德是好朋友。埃拉托斯特尼的主要贡献包括:

埃拉托斯特尼筛法:寻找素数的方法。

地理常数测量:日地间距的测量(现在称一个这样的距离为一个天文单位)、地月间距的测量、测量赤道与黄道之间的偏角、地球半径测量等。

精确地图绘制:当时只有托勒密等级的人物能绘出同等级的地图。

二、算法数学原理:

埃拉托斯特尼筛法是快速筛选素数的算法,在处理大量整数是否是素数时有较高的效率。

例:筛选小于n的整数并记录结果。

解:计算sqrt(n)∵对于任意的z<n,若z为合数,不妨设z=a*b,则必有min(a,b)<sqrt(n)

∴所有小于n的合数均可被小于sqrt(n)的整数整除

2开始,依次去除小于n的整数中能被其整除的数,最后剩下的就是素数

三、算法C++代码:

void eratosthens(bool primelist[],int n)

{

    int i,j,k;

    memset(primelist,true,sizeof(primelist));
    primelist[0]=primelist[1]=false;
    for(i=2,k=4;i<=n;i++,k+=i+i-1)
        if(primelist[i])
            for(j=k;j<=n;j+=i)
                primelist[j]=false;

}

埃式筛法

例:素数的个数 题意:给定整数n,请问n以内有多少个素数  (n 输入: 11 1000000 输出: 5 78498 #include using namespace std; const i...
  • a2459956664
  • a2459956664
  • 2016年04月08日 19:24
  • 1336

埃氏筛法和欧拉筛法的区别

转自: 点击打开链接 Eratosthenes筛法(Sieve of Eratosthenes) 由于思想非常简单,故只给出实现。 1 2 3 ...
  • Baoli1008
  • Baoli1008
  • 2016年03月03日 14:56
  • 3218

埃氏筛法 素数

今天 看了 《编程珠玑》  看到了 埃氏筛法   令我大为震惊  、、、、、、、、查找素数竟然 这么快  因此将 代码 贴出来 、、、、、、、、、、、 # include #includ...
  • duan1522630316
  • duan1522630316
  • 2012年11月18日 21:21
  • 2407

埃氏筛法 求素数

埃氏筛法素数就是除了1和本身之外没有其他的约数,所以有约数的都不是素数。思路:先去掉2的倍数,再去掉3的倍数,再去掉4的倍数,……依此类推,最后剩下的就是素数。 如求100以内的素数,我们只要到去掉...
  • peach90
  • peach90
  • 2015年04月28日 15:47
  • 2363

素数筛法/埃拉托斯特尼筛法(sieve of Eratosthenes)——理解及具体问题

筛法求素数理解及具体问题   素数筛法的基本思想是:把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推,直到筛子为空...
  • huatian5
  • huatian5
  • 2016年04月07日 11:52
  • 575

埃拉托斯特尼筛法

埃拉托斯特尼筛法,简称埃氏筛或爱氏筛,是一种由埃及数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。 基于C++...
  • setsailyf
  • setsailyf
  • 2016年02月19日 16:56
  • 540

判断一个数是不是素数 埃拉托斯特尼筛法 时间复杂度 O(n*lglgn)

说明: 素数的定义:质数(prime number)又称素数。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。 最小的素数...
  • x_i_y_u_e
  • x_i_y_u_e
  • 2015年06月04日 18:36
  • 3178

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

今天刷题刷了这么一道题, 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
  • 2412

埃拉托斯特尼筛法 --- 希腊,筛选素数

埃拉托斯特尼筛法 --- 希腊,筛选素数
  • u012965373
  • u012965373
  • 2016年08月19日 10:11
  • 1170

埃拉托斯特尼筛法(Sieve of Eratosthenes)简单c实现

leetcode上的一道题目https://leetcode.com/problems/count-primes/ 是关于数素数个数的。 然后根据提示查了下wiki 虽然中文版与英文版出入比较大...
  • baidu_27677097
  • baidu_27677097
  • 2015年05月08日 11:17
  • 402
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经典算法——埃拉托斯特尼筛法
举报原因:
原因补充:

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