回文质数
2017-02-05 16:31
204 查看
题意
找出范围[a,b](5 <= a < b <= 100,000,000)( 一亿)间的所有回文质数;
分析
找出所有的回文数再判断它们是不是质数(素数).
var
a,b,l:longint;
function work(w:longint):longint;
var
t,s:longint;
begin
t:=w;
s:=0;
while t<>0 do
begin
inc(s);
t:=t div 10;
end;
work:=s;
end;
function ss(s:string):longint;
var
sz,i:longint;
begin
if (length(s)=2)and(s<>'11') then exit(0);
val(s,sz);
if (sz<a)or(sz>b) then exit(0);
for i:=2 to trunc(sqrt(sz)) do
if sz mod i=0 then
begin
exit(0);
break;
end;
ss:=sz;
end;
procedure hw(k:longint);
var
w1,w2,i,j,bz:longint;
s1,s2:string;
begin
if k>l then exit;
if k mod 2=0 then
begin
w1:=1;
w2:=9;
for i:=1 to k div 2-1 do
begin
w1:=w1*10;
w2:=w2*10+9;
end;
for i:=w1 to w2 do
begin
str(i,s1);
s2:=s1;
for j:=length(s1) downto 1 do
s2:=s2+s1[j];
bz:=ss(s2);
if bz<>0 then writeln(bz);
end;
end else
begin
w1:=1;
w2:=9;
for i:=1 to (k+1) div 2-1 do
begin
w1:=w1*10;
w2:=w2*10+9;
end;
for i:=w1 to w2 do
begin
str(i,s1);
s2:=s1;
for j:=length(s1)-1 downto 1 do
s2:=s2+s1[j];
bz:=ss(s2);
if bz<>0 then writeln(bz);
end;
end;
hw(k+1);
end;
begin
read(a,b);
l:=work(b);
hw(1);
end.
找出范围[a,b](5 <= a < b <= 100,000,000)( 一亿)间的所有回文质数;
分析
找出所有的回文数再判断它们是不是质数(素数).
var
a,b,l:longint;
function work(w:longint):longint;
var
t,s:longint;
begin
t:=w;
s:=0;
while t<>0 do
begin
inc(s);
t:=t div 10;
end;
work:=s;
end;
function ss(s:string):longint;
var
sz,i:longint;
begin
if (length(s)=2)and(s<>'11') then exit(0);
val(s,sz);
if (sz<a)or(sz>b) then exit(0);
for i:=2 to trunc(sqrt(sz)) do
if sz mod i=0 then
begin
exit(0);
break;
end;
ss:=sz;
end;
procedure hw(k:longint);
var
w1,w2,i,j,bz:longint;
s1,s2:string;
begin
if k>l then exit;
if k mod 2=0 then
begin
w1:=1;
w2:=9;
for i:=1 to k div 2-1 do
begin
w1:=w1*10;
w2:=w2*10+9;
end;
for i:=w1 to w2 do
begin
str(i,s1);
s2:=s1;
for j:=length(s1) downto 1 do
s2:=s2+s1[j];
bz:=ss(s2);
if bz<>0 then writeln(bz);
end;
end else
begin
w1:=1;
w2:=9;
for i:=1 to (k+1) div 2-1 do
begin
w1:=w1*10;
w2:=w2*10+9;
end;
for i:=w1 to w2 do
begin
str(i,s1);
s2:=s1;
for j:=length(s1)-1 downto 1 do
s2:=s2+s1[j];
bz:=ss(s2);
if bz<>0 then writeln(bz);
end;
end;
hw(k+1);
end;
begin
read(a,b);
l:=work(b);
hw(1);
end.
相关文章推荐
- 【C++心路历程15】【USACO1.5.2】回文质数 打表在前 方法在其后
- P1217 [USACO1.5]回文质数 Prime Palindromes
- 1.5 回文质数
- C - 查找回文质数
- 回文质数 USACO
- 回文质数优化时间
- USACO 1.5.2 Prime Palindromes 回文质数
- 洛谷 P1217 回文质数 USACO
- P1217 [USACO1.5]回文质数 Prime Palindromes
- 东大OJ-5到100000000之间的回文质数
- [USACO1.5]回文质数 Prime Palindromes(暴力枚举)
- 4190. Prime Palindromes 一亿以内的质数回文数
- 回文质数
- 东大OJ-5到100000000之间的回文质数
- [USACO1.5]回文质数 Prime Palindromes
- 回文质数
- 五位质数回文数
- 东大OJ-5到100000000之间的回文质数
- 大范围内高效查找回文质数(回文数猜想)
- P1217 [USACO1.5]回文质数 Prime Palindromes(#1 - 6)