program LargestPrimeFactor;
function LargestPrimeFactor(n: Int64): Int64;
var
factor: Int64;
begin
factor := 2;
LargestPrimeFactor := -1;
while n > 1 do
begin
if (n mod factor = 0) then
begin
LargestPrimeFactor := factor;
n := n div factor;
end
else
Inc(factor);
end;
end;
begin
Writeln(LargestPrimeFactor(124)); // 2 x 2 x 31
Writeln(LargestPrimeFactor(12)); // 2 x 2 x 3
Writeln(LargestPrimeFactor(288)); // 2 x 2 x 2 x 2 x 2 x 3 x 3
Writeln(LargestPrimeFactor(1288)); // 2 x 2 x 2 x 7 x 23
Writeln(LargestPrimeFactor(100000000));// 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5,
Writeln(LargestPrimeFactor(600851475143)); // 71, 893, 1471, 6857
end.
(*
run:
31
3
3
23
5
6857
*)