筛选法求质数表

 

问题

筛选法是一种古老的求不超过自然数 N(N>1)的所有质数的一种方法。具体做法是:先把 N 个自然数按次序排列起来。最小的质数是 2,所以先把 1 划去,从 2 开始,把 2 留下,而把 2 后面所有能被 2 整除的数都划去。然后 2 后面第一个没划去的数是 3,把 3 留下,再把 3 后面所有能被 3 整除的数都划去。3 后面第一个没划去的数是 5,把 5 留下,再把 5 后面所有能被 5 整除的数都划去。这样一直做下去,每次筛选之后,下一个相邻的数字都必然是质数,这样最后就会把不超过 N 的全部合数都筛掉,留下的就是不超过 N 的全部质数。

请在集算器中编写代码用这个算法找出 10000 以内的全部质数。

思路

大致思路:声明一个从 1 到 10000 的有序序列,把 1 划掉,从最小的质数 2 开始循环,将序列中能够被当前数整除的数赋值为 0,保留当前数本身,最后序列中不等于 0 的数即为 10000 以内的全部质数。

  1. 定义 1 到 10000 的递增序列。
  2. 将序列中值为 1 的成员赋值为 0。
  3. 对递增序列从 2 开始循环,循环体中将序列中能够被当前循环数整除的数赋值为 0。
  4. 剩下的不为 0 的数就是质数。

代码

A B C
1 10000
2 =to(A1) 生成从 1 到 10000 的序列
3 >A2(1)=0 将值为 1 的成员赋值为 0
4 for A2 if A4>0 循环 A2 序列,如当前数不为 0,则说明是质数,把其后能被该数整除的数都置为 0
5 =A1.step(A4,A4).to(2,)
6 >A2(C5)=0
7 =A2.select(~>0) 最后剩下的不为 0 的数就是质数

结果

imagepng