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.