program UniquePrimeFinder;
function IsPrime(n: Integer): Boolean;
var
i, limit: Integer;
begin
if n < 2 then
IsPrime := False
else if n mod 2 = 0 then
IsPrime := (n = 2)
else
begin
limit := Trunc(Sqrt(n));
IsPrime := True;
i := 3;
while (i <= limit) and IsPrime do
begin
if n mod i = 0 then
IsPrime := False;
i := i + 2;
end;
end;
end;
function HasUniqueDigits(n: Integer): Boolean;
var
seen: array[0..9] of Boolean;
d: Integer;
begin
for d := 0 to 9 do
seen[d] := False;
HasUniqueDigits := True;
while (n > 0) and HasUniqueDigits do
begin
d := n mod 10;
if seen[d] then
HasUniqueDigits := False
else
seen[d] := True;
n := n div 10;
end;
end;
var
num: Integer;
begin
for num := 1000 to 9999 do
begin
if IsPrime(num) and HasUniqueDigits(num) then
begin
writeln('First 4-digit prime with all unique digits: ', num);
halt; { stop after finding the first one }
end;
end;
writeln('No such number found.');
end.
(*
run:
First 4-digit prime with all unique digits: 1039
*)