主题:再问回文质数
sablelr
[专家分:0] 发布于 2006-08-12 08:33:00
看了前面的一些帖子,程序本身可行但是运算时间太长了,有没时间短一点的?
回复列表 (共3个回复)
沙发
贺天行宝 [专家分:2300] 发布于 2006-08-12 10:23:00
http://www.wzoi.org/usaco/11%5C204.asp
type arr=array[1..1000]of longint;
var
i,j,k,l,n,m,a2,a3,max,sum:longint;
out:array[1..1000]of longint;
procedure qsort(l,r:longint;var a:arr);
var x,i,j:longint;
begin
if l>=r then exit;
i:=l;j:=r;x:=a[i];
repeat
while (a[j]>=x)and(i<j) do dec(j);
if (a[j]<x)and(i<j) then begin a[i]:=a[j]; inc(i); end;
while (a[i]<=x)and(i<j) do inc(i);
if (a[i]>x)and(i<j) then begin a[j]:=a[i]; dec(j); end;
until i=j;
a[i]:=x;
qsort(l,i,a);qsort(i+1,r,a);
end;
function check(n:longint):boolean;
var
i,j:longint;
begin
check:=true;
for i:=2 to round(sqrt(n)) do
if n mod i=0 then begin check:=false; exit; end;
end;
procedure make2(s,t1,t2:longint);
var i,k:longint;
begin
if t1=a2 div 10 then begin if check(s)and(s>=m)and(s<=n) then begin inc(sum);out[sum]:=s; exit; end; exit; end;
k:=s;
for i:=0 to 9 do
begin
s:=k+i*t1+i*t2;
make2(s,t1 div 10,t2*10);
end;
end;
procedure singler(n:integer);
var
a1,a4,i,j:longint;
begin
if n=1 then begin
for i:=1 to 9 do
if (i>=m)and(i<=max)and(i in[2,3,5,7]) then
writeln(i);
exit;
end;
a4:=1;for i:=1 to n div 2 do a4:=a4*10;
a1:=1;for i:=1 to n-1 do a1:=a1*10;
a2:=1;for i:=1 to n div 2+1 do a2:=a2*10;
a3:=a2 div 100;
for i:=1 to 9 do
for j:=0 to 9 do
if n<>3 then make2(a1*i+i+j*a4,a1 div 10,10)
else make2(a1*i+i+j*a4,a2 div 10,250{no use});
end;
begin
assign(input,'pprime.in');reset(input);
assign(output,'pprime.out');rewrite(output);
readln(m,n);sum:=0;
k:=m;l:=n;i:=0;j:=0;
while k<>0 do
begin
inc(i);
k:=k div 10;
end;
while l<>0 do
begin
inc(j);
l:=l div 10;
end;
max:=n;
if j=9 then dec(j);
for k:=i to j do
if k mod 2=1 then singler(k);
if (n>=11)and(m<=11) then begin inc(sum); out[sum]:=11; end;
qsort(1,sum,out);
for i:=1 to sum do writeln(out[i]);
close(input);close(output);
end.
板凳
sablelr [专家分:0] 发布于 2006-08-12 12:16:00
。。。貌似还是运行很久。。
3 楼
bigchen [专家分:1940] 发布于 2006-10-29 22:25:00
可以用枚举方法:
然后设计两个子程序
一个用来判断素数
一个用来判断回文数
我来回复