`
googya
  • 浏览: 143386 次
  • 性别: Icon_minigender_1
  • 来自: 汉川
社区版块
存档分类
最新评论

Eratosthenes筛选求质数

阅读更多
    除自身之外,无法被其他整数整除的数称为质数,质数的求法很简单,但如何快速的求出质数一直是程序员与数学家努力的课题,这里介绍一个著名的Eratosthenes求质数的方法。
解法
首先知道这个问题可以使用循环来求解,将一个指定的数除以所有小于它的数,若可以整除就不是质数,然而如何减少循环的检查次数?如何求出小于N的所有质数?

首先假设要判断的数是N,则事实上只要检查到N的平方根就可以了,道理很简单,假设A*B=N,如果A大于N的平方根,则事实上在小于A之前的检查就可以先检查到B这个数可以整除N。不过在程序中使用平方根会有精确度的问题,所以可以使用i*i<=N进行检查,且执行更快。

再来假设有一个筛子存放1~N,例如
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ........ N
先将2的倍数筛去:   
2 3 5 7 9 11 13 15 17 19 21 ........ N
再將3的倍數篩去:
2 3 5 7 11 13 17 19 ........ N
再來將5的倍数筛去,再來將7的质数筛去,再來將11的倍數筛去........,如此进行到最后留下的數就都是質數,這就是Eratosthenes筛选方法(Eratosthenes Sieve Method)。

检查的次數还可以再減少,事實上,只要检查6n+1与6n+5就可以了,也就是直接跳过2与3的倍数,使得程序中的if的检查动作可以減少。


def findPrimes(max)
  prime=[1]*max
  for i in 2..Math.sqrt(max).to_int
    if prime[i]==1
      for j in 2*i..max
        if j%i==0
          prime[j]=0
        end
      end
    end
  end
  t=[]
  prime.each_index{|i|t<<i if prime[i]==1 and i>1}
   p t
end
primes=findPrimes(1000)
0
0
分享到:
评论

相关推荐

    C经典算法之Eratosthenes筛选求质数

    ### C经典算法之Eratosthenes筛选求质数 #### 概述 在数学领域,质数(Prime Number)是指只能被1和自身整除的大于1的自然数。寻找质数的方法有很多种,其中Eratosthenes筛法是一种古老而有效的算法,可以高效地找...

    Eratosthenes筛选法求质数.rar

    在易语言中实现Eratosthenes筛选法求质数的源码可能如下: ```易语言 .整数变量 n, i, j .布尔型数组 质数表 (n) .输入 "请输入要找的质数上限:", n 质数表.全部赋值 (.真) i = 2 .循环 (n) .如果 质数表[i] j...

    易语言Eratosthenes筛选法求质数

    在这个“易语言Eratosthenes筛选法求质数”项目中,我们将探讨如何使用易语言实现Eratosthenes筛选法,这是一种古老的算法,用于找出一定范围内的所有质数。 Eratosthenes筛选法,又称为埃拉托斯特尼筛法,是由古...

    筛选法求素数

    筛选法求素数是计算机程序设计中的一种常见算法,用于找出一定范围内所有素数。在C++编程语言中实现这个算法,我们可以利用其强大的数组处理能力和控制结构来高效地完成任务。下面将详细介绍筛选法(也称为...

    C语言经典算法大全.pdf

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数 最小公倍数 因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 "&gt;C语言经典算法大全 老掉牙 河内塔 ...

    经典常用算法(含代码)

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 选择、插入、气泡排序 Shell 排序法 - 改良的插入排序...

    Java经典问题算法大全

    15.Algorithm Gossip: Eratosthenes 筛选求质数 16.Algorithm Gossip: 超长整数运算(大数运算). 17.Algorithm Gossip: 长 PI. 18.Algorithm Gossip: 最大公因数、最小公倍数、因式分解 19.Algorithm Gossip: 完美...

    经典算法大全,常用的算法都在这里

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) ...

    C语言经典算法大全(几十个经典案例,都有详尽代码)

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) ...

    蓝桥杯信息学奥赛练习试题

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) ...

    C-Program-examples.rar_2维码 C语言_c 卡牌游戏_字串核对_背包问题_蒙塔卡罗法

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) Craps...

    c语言经典算法包括老掉牙,汉诺塔,三色旗

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) Craps...

    C语言经典算法大全

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算  关于赌博 洗扑克牌(乱数排列) ...

    易语言Eratosthenes筛选法求质数源码-易语言

    求质数的函数则会实现Eratosthenes筛选法的逻辑。 通过学习并理解这个源码,开发者可以深入掌握易语言的编程技巧,了解如何在实际项目中使用数组和循环,以及如何优化算法提高程序效率。对于初学者,这是一个很好的...

    数据结构与算法

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) ...

    java各种经典算法

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) ...

    经典常用算法 河内塔

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) ...

    Java和C语言实现各种经典算法(含代码图例)

    Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) ...

Global site tag (gtag.js) - Google Analytics