社区讨论
学霸快来看看,答案都是对的,就是不过
P1217[USACO1.5] 回文质数 Prime Palindromes参与者 4已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mi6gifkf
- 此快照首次捕获于
- 2025/11/20 04:30 4 个月前
- 此快照最后确认于
- 2025/11/20 04:30 4 个月前
CPP
var
i,j,a,b,c,d,gs:longint;
s,s1:string;
c1:char;
ss:array[1..7000] of longint;
t,y:text;
procedure qs(l,r:longint); //快排
var
i,j,t:longint;
m:longint;
begin
i:=l;j:=r;
m:=ss[(i+j) div 2];
repeat
while ss[i]<m do inc(i);
while ss[j]>m do dec(j);
if i<=j then begin
t:=ss[i];ss[i]:=ss[j];ss[j]:=t;
inc(i);dec(j);
end;
until i>j;
if l<j then qs(l,j);
if i<r then qs(i,r);
end;
function pr(n:longint):boolean; //判质数
var
i:longint;
begin
if n=0 then exit(false);
i:=2;
while i<=sqrt(n) do begin
if n mod i=0 then exit(false);
i:=i+1;
end;
exit(true);
end;
begin //主程序
assign(t,'pr.in');
assign(y,'pr.out');
reset(t);
rewrite(y); //建文件
gs:=1;
readln(t,a,b); //读入
if a<10 then //10以内
for i:=a to 7 do if pr(i) then begin
ss[gs]:=i;
gs:=gs+1;
end;
for i:=1 to trunc(sqrt(b))*10 do begin //10以上 把数切成一半,再翻过去,再判质数
str(i,s); //把数赋值给字符串
s1:=s; //第2个字符串
for j:=length(s) downto 1 do s:=s+s[j]; //把第一个字符串翻过去
val(s,c);
if (c<=b) and (c>=a) and pr(c) then begin
ss[gs]:=c;
gs:=gs+1;
end;
for c1:='0' to '9' do begin //把第二个字符串加个数在翻过去
str(i,s1);
s1:=s1+c1;
for j:=length(s1)-1 downto 1 do s1:=s1+s1[j];
val(s1,c);
if (c<=b) and (c>=a) and pr(c) then begin
ss[gs]:=c;
gs:=gs+1;
end;
end;
end;
qs(1,gs-1); //排序
for i:=1 to gs-1 do writeln(y,ss[i]); //输出
writeln(y,gs-1);
close(t);
close(y);
end.
回复
共 3 条回复,欢迎继续交流。
正在加载回复...