美文网首页
第十日 两百万以内的素数之和

第十日 两百万以内的素数之和

作者: 刘阿斌 | 来源:发表于2017-03-08 21:15 被阅读73次

10以内的素数之和是 2 + 3 + 5 + 7 = 17.

求两百万以内的素数之和。

分析:关键是寻找一个高效的筛法,用下面这个是不行的:

sieve (x:xs) = x: sieve [ n | n<-xs,n`mod`x/=0]

注意到,8/2=4和8/4=2是意义重复的除法运算,因此要验证8是否是素数只要用8与[2,根号8]之间的自然数做除运算就行了。
一般化:一个自然数n是素数,当它无法被[2,根号n]之间的自然数整除。
改进:一个自然数n是素数,当它无法被[2,根号n]之间的素数整除。
利用这个规律写出的筛法quickSieve:

sieve [] numbers = numbers
sieve (p:ps) numbers = sieve ps (filter (\n->n`mod`p/=0) numbers)
quickSieve ps primes limit
  | lp^2 > limit = []
  | otherwise = addPrimes ++ quickSieve pss (tail newPrimes) limit
      where lp = last ps
            hp = head primes
            pss = ps ++ [hp]
            numbers = [lp^2+1 .. minimum [hp^2,limit] ]
            addPrimes = sieve pss numbers
            newPrimes = primes ++ addPrimes

answer = sum ([2,3]++quickSieve [2] [3] 100)

答案是142913828922

相关文章

  • 第十日 两百万以内的素数之和

    10以内的素数之和是 2 + 3 + 5 + 7 = 17. 求两百万以内的素数之和。 分析:关键是寻找一个高效的...

  • 100以内素数之和

    描述 求100以内所有素数之和并输出。 素数指从大于1,且仅能被1和自己整除的整数。 提示:可以逐一判断100以内...

  • 欧拉计划10 (素数的和)

    题目: 所有小于10的素数的和是2 + 3 + 5 + 7 = 17。 求所有小于两百万的素数的和。 Java: ...

  • 100以内的素数

    a= []#先定义了一个新的列表 for i in range(1,101):#通过for循环 if i ==1...

  • python作业一:素数问题

    求100以内的素数。 解题思路:素数,只能被1和他本身整除的数。那么,我们就用100以内的每个数(1除外)去除以比...

  • 0-100

    第1题: 100以内的所有素数

  • 204. Count Primes

    n以内素数的个数。 参考:埃拉托斯特尼筛法和素数判断 代码:

  • python 求100以内的素数

    题目一 :求100以内的素数(素数为只能被1和它本身整除的整数) 解题思路: 求出100以内除了1的所有整数(1不...

  • 求解100以内的所有素数(问题来自PythonTip)

    求解100以内的所有素数(AC/Submit)Ratio(4615|22542)20.47% 描述:输出100以内...

  • 创造

    数学曾经教过我们,两个集合,AUB=A+B-A∩B9他们的并集元素数=他们各自的元素数之和-他们的交集元素数) 也...

网友评论

      本文标题:第十日 两百万以内的素数之和

      本文链接:https://www.haomeiwen.com/subject/vgdigttx.html