Prime Palindromes The number 151 is a prime palindrome because it is both a prime number and a palindrome (it is the same number when read forward as backward). Write a program that finds all prime palindromes in the range of two supplied numbers a and b (5 <= a < b <= 100,000,000); both a and b are considered to be within the range . PROGRAM NAME: pprime INPUT FORMAT Line 1: Two integers, a and b SAMPLE INPUT (file pprime.in) 5 500 OUTPUT FORMAT The list of palindromic primes in numerical order, one per line. SAMPLE OUTPUT (file pprime.out) 5 7 11 101 131 151 181 191 313 353 373 383 我觉得应当采用生成之后检测的方法判断,下面是一个Pascal的程序,生成指定位数的 回文数。并且,对于本题来说,偶数位的回文数肯定是11的倍数。 {生成回文数的过程,基本算法如下: 输入:生成回文数的位数 n 输出:print 输出的string类型 算法:如果n是偶数,生成左边2位,再颠倒成 为右边2位,组合一下就可以了;如果n是奇数 生成方式类似,只是输出的时候中间加上0-9 这几个数字组成新的输出。 这是一个基本的算法,没有进行优化,不过我想 已经能够正常工作了。 } program huiwenproblem; procedure print(strval:string); {输出结果} begin writeln(strval); readln; end; procedure geth(n:integer); var i,k:longint; tempstr,tempstr1:string; function power10(a:integer):longint; {计算10的a次方} var m:longint; s:integer; begin m:=1; for s:=1 to a do m:=m*10; power10:=m; end; begin if n mod 2 =0 then {偶数} begin for i:=power10(n div 2) to power10(n div 2)*10-1 do begin str(i,tempstr); tempstr1:=''; for k:=1 to length(tempstr) do begin tempstr1:=tempstr1+tempstr[length(tempstr)-k+1]; end; tempstr:=tempstr+tempstr1; print(tempstr); end; end else begin for i:=power10(n div 2) to power10(n div 2)*10-1 do begin str(i,tempstr); tempstr1:=''; for k:=1 to length(tempstr) do begin tempstr1:=tempstr1+tempstr[length(tempstr)-k+1]; end; for k:=0 to 9 do begin print(tempstr+char(48+k)+tempstr1); end; end; end; end; begin geth(3); {举一个例子} end.