素数是只能被1及其本身整除的一类整数。第一个素数是2(也是唯一的偶数素数),其他的素数还包括3,5,7,11,13,17,等等。
爱拉托逊斯方法以2开始的整数表开始,因为2是素数,因此所有可以被2整除的数都被排除掉(即除了2之外的全部偶数)。接下来是3,因为3是素数,因此所有能被3整除的数也被排除掉。因为4在第一个步骤中已经被排除掉,所以下一个要考虑的数是5,即排除所有5的倍数。按这种方式不断循环,最后剩下的都是素数。
下面的ALGOL程序用来筛选2\~10,000之间的所有素数,程序中定义了一个布尔数组,用来对所有的数进行标识。该程序如下:
第一个 for 循环将数组 a的每一个元素的初始值设置为布尔值 true。这里的 true 表示该位置的数是素数,因此现在程序默认所有的数都是素数。第二个for循环的范围是1\~100(100刚好是10000的平方根)。在第二个for循环中,如果判断条件成立,该数为素数,即 a[i]为 true,则第三个for 循环则会把该数的所有小于或等于10000的倍数(除了其本身)设置为false,因为这些数都不是素数。最后的for循环用来输出所有的素数,这里的判断条件是:若a[i]为 true,则 i 为素数。
程序设计到底是一门科学还是一门艺术呢?这的确是一个有趣的问题,一些人甚至还为此争论不休:一方面,你或许在大学里系统地学习了计算机科学(Computer Science)课程;另一方面,你又读过如唐纳德·克努斯(DonaldKnuth)的名著《计算机编程艺术系列》(The Art of Computer Programming series)等著作。然而物理学家理查德·费叶曼(Richard Feynman)曾这样写道:“从某种程度上看计算机科学像是一种工程,它的工作范畴是利用一些事物去实现其他事物。”
24 高级语言与低级语言
393