Program Degree;
Var
i, A : LongInt; { число из входного файла }
x, u, j, N, m : LongInt; { самая большая степень в разложении }
Function FDiv (A, left : LongInt) : LongInt;
var
d, { первый делитель }
i : LongInt; { счетчик }
begin
d := 1; { инициализация }
for i := left to Trunc (Sqrt (A)) do
if (A mod i = 0)
then
begin
d := i; { нашли делитель }
Break; { выходим из цикла }
end;
if (d <> 1)
then
FDiv := d
else { в противном случае число А ? простое }
FDiv := A;
end;
Function g (N, u : LongInt) : LongInt;
var
i : LongInt; { счетчик }
begin
i := 0; { инициализация }
while (N mod u = 0)
do
begin
Inc (i);
N := N div u;
end;
g := i;
end;
Begin
Assign (Input, 'input.txt');
Assign (Output, 'output.txt');
Reset (Input);
Read (A);
Close (Input);
m := 0;
N := 1; { инициализация }
i := FDiv (A, 2);
u := 2; { первое простое число }
while (A > 1)
do
begin
N := N * i; { умножаем N на очередной простой делитель А }
{ избавляемся от сомножителя i }
j := 0; { инициализация }
while (A mod i = 0)
do
begin
Inc (j);
A := A div i;
end;
if (j > m)
then
begin
m := j; { в этом случае j максимальная степень }
u := i; { непосредственно сам делитель }
end;
i := FDiv (A, i + 2);
end;
{ берем x = 1 для более простого решения с технической стороны }
x := 1;
while (g (N * x, u) * N * x < m)
do
Inc (x);
N := N * x; { искомое решение }
ReWrite (Output);
Write (N);
Close (Output);
End.
© ООО «Знанио»
С вами с 2009 года.