[Nimrod] Re: Nim埃氏筛法 →→→→→进入此内容的聊天室

来自 4n0n4me, 2023-01-15, 写在 Nimrod, 查看 79 次. 这张便签是回复 Nim埃氏筛法 来自 4n0n4me - 对比版本
URL http://www.code666.cn/view/744a4ef5
  1. # 先前那个错了啦,我是傻逼
  2.  
  3. import strutils, strformat
  4.  
  5. from math import sqrt, floor
  6.  
  7. var
  8.     n = parseInt(readLine(stdin)) # 要求质数的范围上限
  9.     numbers: seq[Natural] = @[]   # 剩余未判断素性的数字
  10.     primes: seq[Natural] = @[]    # 质数们
  11.  
  12. for i in 2..n:
  13.     numbers.add(i) # 初始化
  14.  
  15. while len(numbers) > 0:
  16.     var
  17.         p = numbers[0] # 最小的质数
  18.         newNumbers: seq[Natural] = @[]
  19.  
  20.     primes.add(p) # 比自己小的都已经删掉或者进质数列表了,自己没被筛掉就是质数
  21.  
  22.     if p * p > n:
  23.         break # 自己乘以自己都已经比上限的平方大了,那么自己啥也筛不到了,都被前面的因数筛完了
  24.  
  25.     for i, v in numbers:
  26.         if not (v / p == floor(v / p)): # 不能被用来筛的质数整除,所以不知道是不是质数
  27.             newNumbers.add(v) # 接着筛
  28.         # 否则就淘汰,下一次不用筛了(这好像是一种优化过的方法,相当于欧式筛法的效果?)
  29.  
  30.     numbers = newNumbers
  31.  
  32.     echo &"numbers left: {numbers[0..min(10, high(numbers))]}... after sieved by {p}"
  33.  
  34. primes &= numbers # 把剩下的幸存者(一定是质数)捞上
  35.  
  36. echo "---Result---"
  37.  
  38. echo primes
  39.  

回复 Re: Nim埃氏筛法 rss

标题 提交人 语言 时间
Re: Re: Nim埃氏筛法 4n0n4me nimrod 1 年 前.

回复 "Re: Nim埃氏筛法"

这儿你可以回复上面这条便签

captcha