pascal 语言:输入n至m(包括n和m)间有多少个回文素数。(0<n<m)

2024-11-28 12:20:06
推荐回答(3个)
回答1:

思路就是从n到m循环,然后判断 程序:
var
a1,a2,a3,a4:longint;
function fun1(a:longint):boolean;//判断回文数函数
var s:string; p,p1:longint;
begin
str(s,a);//数字转字符串
p1:=length(s);//测串长
for p:=1 to p1 div 2 do//从1到串长一半循环
if s[p]<>s[p1-p+1] then exit(false);//如果不是回文数以假跳出
exit(true);//以真跳出
end;
function fun2(a:longint):boolean;//判断素数函数
var p:longint;
begin
for p:=2 to trunc(sqrt(a)) do//这样你的用时将会被开平方,我们做程序要的是效率
if a mod p<>0 then exit(false);//如果不是素数以假跳出
exit(true);//以真跳出
end;
begin//主程序
readln(a1,a2);//n和n的值
for a3:=a1 to a2 do
if fun1(a3) then//两个分开会快一点,不然会多判断
if fun2(a3) then
inc(a4);//加一,此函数会比a4:=a4+1快
write(a4);
end.
祝你学习愉快!有麻烦请向我提问~

回答2:

看题就明白你的意思了。你是想把素数放入一个数组中,然后对其中的元素一个一个地判断回文。
可以这样实现:
j:=1;
if i就素数 then begin b[j]:=i; inc(j);end;
知道了j的长度,是不是就知道怎么对其中的元素一个一个地判断了?
--------------------------------------------------------------------
其实,此题可以不用数组,程序如下:
var n,m,i,j,len,sum:integer;
s:string;
b:boolean;
function prime(x:integer):boolean; //函数prime,判断一个数是否是素数
var p:integer;
f:boolean;
begin
f:=true;
p:=2;
while(p<=x div 2) and (f) do
if x mod p=0 then f:=false else inc(p);
prime:=f;
end;
begin
readln(n,m);
for i:=n to m do
begin
b:=prime(i);
if b=true then //如果单前i是素数
begin
str(i,s);//将i转换成字符串并存放到s中
len:=length(s);//求字符串s的长度
//以下三行判断s是否回文
j:=1;
while (j begin dec(len);inc(j); end;
if j>=len then inc(sum);//j>=len表明s是回文,则计数器sum加1
end;
end;
writeln(sum);
end.

回答3:

int main()
{
int chuli(long);
long m,k,d,n;
long i;
scanf("%d%d",&n,&m);
for(i=n;i<=m;i++)
{
k=sqrt(i);
for(d=2;d<=k;d++)
{
if(i%d==0)
break;
}
if(d>k)
{
if(chuli(i)==1)
printf("%d\n",i);
}
}
return 0;
}
int chuli(long z)
{
long sum=0,temp;
temp=z;
while (z)
{
sum=10*sum+z%10;
z/=10;
}
if(temp==sum) return 1;
return 0;
}