91 lines
1.7 KiB
Plaintext
91 lines
1.7 KiB
Plaintext
uses math;
|
|
|
|
var
|
|
f : text;
|
|
n : longint;
|
|
lena, i : integer;
|
|
a : array[1..512] of longint;
|
|
|
|
procedure insort(x : longint);
|
|
var i, j : integer;
|
|
begin
|
|
inc(lena);
|
|
a[lena] := x - 1;
|
|
for i := 1 to lena do
|
|
if a[i] < x then begin
|
|
for j := lena downto i + 1 do
|
|
a[j] := a[j - 1];
|
|
a[i] := x;
|
|
exit
|
|
end
|
|
end;
|
|
|
|
function notin(x : longint) : boolean;
|
|
var l, h, m : integer;
|
|
begin
|
|
l := 1;
|
|
h := lena;
|
|
repeat
|
|
m := (l + h) div 2;
|
|
if a[m] = x then exit(false);
|
|
if a[m] < x then h := m - 1
|
|
else l := m + 1
|
|
until l > h;
|
|
notin := true
|
|
end;
|
|
|
|
procedure mklist(n0 : longint);
|
|
var
|
|
i, j : byte;
|
|
n10, m0 : longint;
|
|
begin
|
|
if n0 <> 0 then begin
|
|
insort(n0);
|
|
for i := 0 to trunc(log10(n0)) do
|
|
begin
|
|
n10 := 1;
|
|
for j := 1 to i do n10 := n10 * 10;
|
|
m0 := n0 div (n10 * 10) + n0 mod n10;
|
|
if notin(m0) then mklist(m0)
|
|
end
|
|
end
|
|
end;
|
|
|
|
function prime(m : longint) : boolean;
|
|
var p, q : integer;
|
|
begin
|
|
if m < 2 then exit(false);
|
|
if m = 2 then exit(true);
|
|
if m = 3 then exit(true);
|
|
if m mod 2 = 0 then exit(false);
|
|
if m mod 3 = 0 then exit(false);
|
|
p := 5;
|
|
q := 2;
|
|
while p * p <= m do
|
|
begin
|
|
if m mod p = 0 then exit(false);
|
|
p := p + q;
|
|
q := 6 - q
|
|
end;
|
|
prime := true
|
|
end;
|
|
|
|
begin
|
|
assign(f, 'BAI1.INP');
|
|
reset(f);
|
|
read(f, n);
|
|
close(f);
|
|
lena := 0;
|
|
mklist(n);
|
|
assign(f, 'BAI1.OUT');
|
|
rewrite(f);
|
|
for i := 1 to lena do
|
|
if prime(a[i]) then begin
|
|
writeln(f, a[i]);
|
|
close(f);
|
|
exit
|
|
end;
|
|
writeln(f, -1);
|
|
close(f)
|
|
end.
|