Pascal
Modified: Wednesday, 22-12-2021 07:00 AM
Cho số N < 31. Tìm số K nhỏ nhất để (N! x K) là số chính phương. N!=1 x 2 x 3 x ... x N
var n:byte;
a:array[1..100] of byte;
i,j:byte;
k:longint;
procedure tach(x:byte) ;
var d:byte;
begin
d := 2;
while x<>1 do
if x mod d=0 then
begin
inc(j);
a[j]:=d;
x := x div d;
end
else inc(d);
end;
procedure timK;
var m,n,t:byte;
begin
for i:=1 to j-1 do
for m:= i+1 to j do
if a[m]<a[i] then
begin
t := a[m];
a[m]:=a[i];
a[i]:=t;
end;
k := 1;
n := 1;
m := a[1];
for i:=2 to j+1 do
begin
if a[i]=m then inc(n)
else
begin
if odd(n) then
k := k*m;
m := a[i];
n := 1;
end;
end;
writeln(k);
end;
begin
readln(n);
j := 0;
for i:=2 to n do
tach(i);
timK();
readln;
end.