{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. |