2016天水中梁空港新城:什么是素数

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 07:21:20

素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任
  何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12
  =6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以
  外,不能表示为其它任何两个整数的乘积,所以13是一个素数。
  有的数,如果单凭印象去捉摸,是无法确定它到底是不是素数的。有些数则
  可以马上说出它不是素数。一个数,不管它有多大,只要它的个位数是2、4、
  5、6、8或0,就不可能是素数。此外,一个数的各位数字之和要是可以被3
  整除的话,它也不可能是素数。但如果它的个位数是1、3、7或9,而且它的
  各位数字之和不能被3整除,那么,它就可能是素数(但也可能不是素数)。没
  有任何现成的公式可以告诉你一个数到底是不是素数。你只能试试看能不能将这
  个数表示为两个比它小的数的乘积。
  找素数的一种方法是从2开始用“是则留下,不是则去掉”的方法把所有的
  数列出来(一直列到你不想再往下列为止,比方说,一直列到10,000)。
  第一个数是2,它是一个素数,所以应当把它留下来,然后继续往下数,每隔一
  个数删去一个数,这样就能把所有能被2整除、因而不是素数的数都去掉。在留
  下的最小的数当中,排在2后面的是3,这是第二个素数,因此应该把它留下,
  然后从它开始往后数,每隔两个数删去一个,这样就能把所有能被3整除的数全
  都去掉。下一个未去掉的数是5,然后往后每隔4个数删去一个,以除去所有能
  被5整除的数。再下一个数是7,往后每隔6个数删去一个;再下一个数是11
  ,往后每隔10个数删一个;再下一个是13,往后每隔12个数删一个。……
  就这样依法做下去。
  你也许会认为,照这样删下去,随着删去的数越来越多,最后将会出现这样
  的情况;某一个数后面的数会统统被删去崮此在某一个最大的素数后面,再也不
  会有素数了。但是实际上,这样的情况是不会出现的。不管你取的数是多大,百
  万也好,万万也好,总还会有没有被删去的、比它大的素数。
  事实上,早在公元前300年,希腊数学家欧几里得就已证明过,不论你取
  的数是多大,肯定还会有比它大的素数,假设你取出前6个素数,并把它们乘在
  一起:2*3*5*7*11*13=30030,然后再加上1,得3003
  1。这个数不能被2、3、5、7、11、13整除,因为除的结果,每次都会
  余1。如果30031除了自己以外不能被任何数整除,它就是素数。如果能被
  其它数整除,那么30031所分解成的几个数,一定都大于13。事实上,3
  0031=59*509。
  对于前一百个、前一亿个或前任意多个素数,都可以这样做。如果算出了它
  们的乘积后再加上1,那么,所得的数或者是一个素数,或者是比所列出的素数
  还要大的几个素数的乘积。不论所取的数有多大,总有比它大的素数,因此,素
  数的数目是无限的。
  随着数的增大,我们会一次又一次地遇到两个都是素数的相邻奇数对,如5
  ,7;11,13;17,19;29,31;41,43;等等。就数学家所
  能及的数来说,它们总是能找到这样的素数对。这样的素数对到底是不是有无限
  个呢?谁也不知道。数学家认为是无限的,但他们从来没能证明它。这就是数学
  家为什么对素数感兴趣的原因。素数为数学家提供了一些看起来很容易、但事实
  却非常难以解决的问题,他们目前还没能对付这个挑战哩。
  这个问题到底有什么用处呢?它除了似乎可以增添一些趣味以外,什么用处
  也没有。

素数就是质数,只是现在人们基本都用质数来表述只有1和数的本身是这个数的约数的数字,例如2、3、5、7、11等等。1既不是质数,又不是合数。

注:约数就是能整除一个数的数字,例如12的约数有1、2、3、4、6、12。合数就是一个数除1和它本身以外还有其他数能整除它的数字,例如4、6、8、10、12等等。

素数

我们知道,大于1,并且除1和它本身外没有其他因数的自然数叫素数(或质数) ,2是最小的素数,除2以外,所有的偶数都不是素数。故此,对于大于3的自然数,判断它是否素数,可以使用下面的方法:

例1-7:判断一个数是否素数。

分析:只要使用2到该数的平方根之间的所有数去除这个数,就可以判断其是否素数。是素数:passed,否则no passed。说明:由于Pascal中的平方根是实型数,而实型数不是有序数,不能用作FOR循环中的循环变量。所以,我们利用取整函数将实型数转换成整型数。

program L1-1-07;

Var

x,i,j,s:integer;

begin

s:=1;

while x<4 do read(x);

for i:=2 to trunc(sqrt(x)) do if x/i=int(x/i) then s:=0;

if s=0 then

write(x:6,'is no passed ')

else

write(x:6,'is passed ');

end.

例1-8:求100以内的所有素数。

分析:方法与上面相同。

program L1-1-08;

Var

x,x1,i,j,s:integer;

begin

for x:=2 to 100 do

begin

s:=1;

for i:=2 to trunc(sqrt(x)) do if x/i=int(x/i) then s:=0;

if s=1 then write(x:6)

end;

end.
求两个自然数的最小公倍数(用数学方法:两个数的最小公倍数是这两个数的积被它们的最大公约数去除)。

program L1-1-14;

Var

m,n,c:integer;

p:longint;

begin

readln(n); readln(m);

p:=m*n;

while m/n<>int(m/n) do

begin

c:=m mod n; m:=n; n:=c

end;

p:=p div c;

writeln(p)

end.
一个自然数是素数,且它的各位数字任意调换后仍为素数,则称为绝对素数,例如:13。试求出所有的两位绝对素数。

除了一和它本身,不能被其他数整除的数,如2、3、5、7、11、13等等

除了一和它本身,没有其他因数

只能被1和自身整除的数,如3,5,7,11.

但1,2不是素数,是质数