用Pascal语言求出1——1000以内的孪生素数!!!!

各位大神帮帮忙!!!

思路:

1.定义一个“函数prime”,判断该数是否是素数;

2.主程序:

   1)输出(2,3)

   2)从3~999的所有奇数循环;

   3)如果这个数是素数,则判断这个数+2是不是素数,如果是,则输出(这个数,这个数+2)。


程序LZ可以自己试试看。


这个定义的函数prime的思路是:

1.要判断一个数 n 是否是素数,可以从2~trunc(sqrt(n))循环,再看循环变量是否能整除 n ,如果都不能整除,则 n 是素数;

2.过程如下:

function prime(n:longint):boolean;

var i:longint;

begin

 prime:=true;

 for i:=2 to trunc(sqrt(n)) do 

  if n mod i=0 then 

  begin 

    prime:=false;

    exit;

  end;

end;


这段代码不优化,不过由于是1000以内,还可以。

经过上机调试,测试通过,源代码见附件。

希望对你有帮助。

追问

那孪生素数应该怎么求呢?

追答

所谓孪生素数,就是连续的两个奇数都是素数(比如5和7,或11和13,特别的,因为2是唯一的偶素数,因此2和3也是一对孪生素数)。

求孪生素数,是在主程序段内,如果你已看过代码了,会发现这么一段:

if prime(i) and prime(i+2)
then writeln('(',i,',',i+2,')');

由于我们的循环变量 i 已经定义为了奇数:if odd(i)

因此如果 i 和 i+2 都通过了判断素数prime的函数,就会都返回true,因此可以肯定i和i+2是一对孪生素数。

      理解了吗?


为了防止LZ没装pascal编译器,这里再放一个可执行文件,点开后会有结果,1000以内的孪生素数。(先下载)


温馨提示:内容为网友见解,仅供参考
无其他回答

用Pascal语言求出1——1000以内的孪生素数!!!
1)输出(2,3)2)从3~999的所有奇数循环;3)如果这个数是素数,则判断这个数+2是不是素数,如果是,则输出(这个数,这个数+2)。程序LZ可以自己试试看。这个定义的函数prime的思路是:1.要判断一个数 n 是否是素数,可以从2~trunc(sqrt(n))循环,再看循环变量是否能整除 n ,如果都不能...

100以内的8对孪生质数是多少?(写下数)Pascal语言
function f(n:integer):boolean;var x,y:integer;begin f:=false;for x:=1 to n div 2 do if n mod x=0 then exit;f:=true;end;begin for i:=2 to 100 do if f(i)and f(i+2) then writeln(i,' ',i+2);end.答案:3 5 5 7 11 13 17 19 29 31 41 43 59 61 71 ...

孪生漂亮数代码及其结果
11309769,11309768 以下是使用 Pascal 语言实现的孪生漂亮数寻找算法。pascal node = record z, n: longint; end; var i, r, j: longint; b: array[0..1000, 0..1] of longint; procedure find(ans: longint); var i, p: longint; a: array[1..100] of node; begin fillchar(a...

输出100以内15对孪生素数。(孪生素数是指两个相差为2的素数,例如:3和5...
100以内只有8个,应该是200以内。

求两题Free Pascal程序,急需!!
第一题:var i:integer;function ok(a:integer):boolean;var i:integer;begin for i:=2 to trunc(sqrt(a)) do if a mod i=0 then exit(false);exit(true);end;begin for i:=3 to 89 do if ok(i) and ok(i+2) then writeln(i,' ',i+2);end.第二题:procedure ok(a,b...

pascal孪生素数 哪里有错??
求2到n中相差m的孪生素数,自己改一下吧 var n,m,i,j,ans,k:longint;a:array[1..100000] of longint;t:boolean;begin readln(n,m);for i:=2 to n do begin t:=true;for j:=2 to trunc(sqrt(i)) do if i mod j=0 then t:=false;if t then begin inc(k); a[k]:=i...

相似回答