{Iloczyn - runda próbna 7.05.2014}
program ilo;
const kmax=45; {p=ln(1.618034); (1+sqrt(5))/2} A=0.7236068;{sqrt(5)}
type TI=longint;
var i,k,kk,n,t,sqn,wynik,ilaz:Ti;
f: array[0..kmax] of Ti;
function kf(n:Ti):Ti; //numer k liczby Fibonacciego "najbliższej" liczbie n
const C=2.236068;{sqrt(5)} lnq=0.4812118;{lnq:=ln((1+sqrt(5))/2)}
begin if n in[0,1] then kf:=n else kf:=round(ln(n*C)/lnq) end;
begin
f[0]:=0; f[1]:=1;
for k:=2 to kmax do f[k]:=f[k-1]+f[k-2]; //generowanie liczb Fib
readln(t);
for t:=1 to t do
begin readln(n);
if n<7 then
begin if n<0 then writeln('NIE') else writeln('TAK'); continue end;
k:=kf(n);
if n=f[k] then begin writeln('TAK'); continue end;//Fliczba>7
sqn:=round(sqrt(n));
i:=2; wynik:=0;
repeat i+=1; //dzielenie n przez kolejne Fliczby, (poczynając od f[3]=2)
if n mod f[i] = 0 then // i sprawdz, czy iloraz jest Fliczbą
begin ilaz:=n div f[i]; kk:=kf(ilaz);
if ilaz=f[kk] then begin wynik:=1; break end //iloraz jest Fliczbą!
end
until f[i]>sqn;
if wynik=0 then writeln('NIE') else writeln('TAK')
end //t
end.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | {Iloczyn - runda próbna 7.05.2014} program ilo; const kmax=45; {p=ln(1.618034); (1+sqrt(5))/2} A=0.7236068;{sqrt(5)} type TI=longint; var i,k,kk,n,t,sqn,wynik,ilaz:Ti; f: array[0..kmax] of Ti; function kf(n:Ti):Ti; //numer k liczby Fibonacciego "najbliższej" liczbie n const C=2.236068;{sqrt(5)} lnq=0.4812118;{lnq:=ln((1+sqrt(5))/2)} begin if n in[0,1] then kf:=n else kf:=round(ln(n*C)/lnq) end; begin f[0]:=0; f[1]:=1; for k:=2 to kmax do f[k]:=f[k-1]+f[k-2]; //generowanie liczb Fib readln(t); for t:=1 to t do begin readln(n); if n<7 then begin if n<0 then writeln('NIE') else writeln('TAK'); continue end; k:=kf(n); if n=f[k] then begin writeln('TAK'); continue end;//Fliczba>7 sqn:=round(sqrt(n)); i:=2; wynik:=0; repeat i+=1; //dzielenie n przez kolejne Fliczby, (poczynając od f[3]=2) if n mod f[i] = 0 then // i sprawdz, czy iloraz jest Fliczbą begin ilaz:=n div f[i]; kk:=kf(ilaz); if ilaz=f[kk] then begin wynik:=1; break end //iloraz jest Fliczbą! end until f[i]>sqn; if wynik=0 then writeln('NIE') else writeln('TAK') end //t end. |
English