用pascal语言编回文素数
发布网友
发布时间:2023-09-18 05:47
我来回答
共4个回答
热心网友
时间:2023-09-22 00:11
我说一下思路吧。
首先数据范围是100000-999999的话,只要循环
for i{循环变量}:=100000 to 999999就可以了,这里循环变量不要忘了要用longint
之后只要判断素数和回文数就可以了
可以用
if 判断回文数(i)=false then flag{记录}=false;
else if 判断素数(i)=false then flag(记录)=false;
if flag=true then writeln(i);
其中flag先置为true
这样就可以判断出当前的这个i是不是即是素数也是回文数了~
判断素数的方法:
再开一个循环j,从2到i-1(简化一下的话是round(i-1+1,理由去看素数的定义)
然后循环,如果i mod{求余}j<>0 then flagg{另一个记录器}=false
flagg先置为true
最后如果flagg还是为true那么这个数就是素数了
判断回文数的方法:
把当前这个数转为字符串形式(用函数str,方法参见str函数)
之后把这个字符串反向输入另一个字符串(方法是for k{循环变量}:=length(那个字符串变量名)) downto 1 do 第二个字符串变量名:=第二个字符串变量名+第一个字符串变量名[k]
这时候不要忘记第二个字符串变量名要先置为''{空}
然后if 第二个字符串变量名=第一个字符串变量名 then 这个数就是回文数了
把我说的穿起来就行了,那两个判断可以抽象出来作为函数function
以上。望采纳。
热心网友
时间:2023-09-22 00:11
begin
i:=0;
for j:=2 to 1000 do
begin
f:=true;
for k:=2 to trunc(sqrt(j)) do
if j mod k=0 then begin f:=false;break;end;
if f then begin i:=i+1;a[i]:=j;
end;
for j:=100 to 999 do
begin
n:=(i mod 10)+(i mod 100)div 10*10+i div 100*100+i*1000;
f:=true;
for k:=1 to i do
if n mod a[k]=0 then begin f:=false;break;end;
if f then writeln(n);
end;
end.
热心网友
时间:2023-09-22 00:12
反正都是六位数,只用循环前三位(000~999)就行了,之后只用判断是否>100000且为质数
热心网友
时间:2023-09-22 00:13
var
i,j,k:longint;
a,p,q,tot:longint; {定义}
begin
tot:=0;
for i:=1 to 9 do
for j:=0 to 9 do
for k:=0 to 9 do begin
a:=i*100000+j*10000+k*1000+k*100+j*10+i; {六位数的回文数}
q:=0;
for p:=2 to round(sqrt(a))+1 do {判断是否素数}
if a mod p = 0 then
begin
q:=1;break;
end;
if q=1 then continue;
tot:=tot+1; writeln(a);
end;
writeln('total=',tot); {输出统计}
end.
-----
注:没有在FP上编译