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.