如何求素数
. 自然数是 ,,
. 素数是 ,,(不包括 的只能背 和它本身整除的自然数)
!"#
$%"##&&
!"#
$%"#"'%#&&
$(""
!"#
)%*#
+
$ !""
,%$-"( 是素数.-#
+
+
【1】求 10000 以内的所有素数。
素数是除了 和它本身之外再不能被其他数整除的自然数。由于找不到一个通项公式来表示所有的素数,所以对于数学家
来说,素数一直是一个未解之谜。像著名的 哥德巴赫猜想、孪生素数猜想,几百年来不知吸引了世界上多少优秀的数学家 。
尽管他们苦心钻研,呕心沥血,但至今仍然未见分晓。
自从有了计算机之后,人们借助于计算机的威力,已经找到了
/0
以内的所有素数。
求素数的方法有很多种,最简单的方法是根据素数的定义来求。对于一个自然数 1,用大于 小于 1 的各个自然数都去除
一下 1,如果都除不尽,则 1 为素数,否则 1 为合数。
但是,如果用素数定义的方法来编制计算机程序,它的效率一定是非常低的,其中有许多地方都值得改进。
第一,对于一个自然数 1,只要能被一个非 非自身的数整除,它就肯定不是素数,所以不
必再用其他的数去除。
第二,对于 1 来说,只需用小于 1 的素数去除就可以了。例如,如果 1 能被 整除,实际
上就能被 和 整除,如果 1 不能被 和 整除,那么 1 也决不会被 整除。
第三,对于 1 来说,不必用从 到 1 一 的所有素数去除,只需用小于等于√1根号 1的所有素数去除就可以了。这一点
可以用反证法来证明:
如果 1 是合数,则一定存在大于 小于 1 的整数 和 ,使得 1"2。
如果 和 均大于√1,则有:1=231231=1。
而这是不可能的,所以, 和 中必有一个小于或等于√1。
基于上述分析,设计算法如下:
用 ,,,4 逐个试除 1 的方法求出 以内的所有素数。
用 以内的所有素数逐个试除的方法求出 以内的素数。
首先,将 ,,,4 分别存放在 56、56、56、576中,以后每求出一个素数,只要不大于 ,就依次存放在 8
数组中的一个单元 中。当我们求 9 之间的素数时,可依次用 56-56的素数去试除 1,这个范围内的素数
可以不保存,直接打印。
【2】用筛法求素数。