/* 2014 * Maciej Szeptuch * II UWr */ #include <cstdio> #include <algorithm> using namespace std; int tests, number, fib[64], fibs; void generate(void); bool check(int num); int main(void) { generate(); scanf("%d", &tests); for(int t = 0; t < tests; ++ t) { scanf("%d", &number); puts(check(number) ? "TAK" : "NIE"); } return 0; } inline void generate(void) { fib[0] = 0; fib[1] = 1; for(fibs = 2; fibs < 64 && fib[fibs - 1] <= 1000000000; ++ fibs) fib[fibs] = fib[fibs - 2] + fib[fibs - 1]; } inline bool check(int num) { if(!num) return true; for(int f = 1, g = fibs - 1; f < fibs && fib[f] <= num; ++ f) { while(g > 0 && fib[g] > num / fib[f]) -- g; if(num / fib[f] == fib[g] && (num % fib[f]) == 0) return true; } return false; }
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | /* 2014 * Maciej Szeptuch * II UWr */ #include <cstdio> #include <algorithm> using namespace std; int tests, number, fib[64], fibs; void generate(void); bool check(int num); int main(void) { generate(); scanf("%d", &tests); for(int t = 0; t < tests; ++ t) { scanf("%d", &number); puts(check(number) ? "TAK" : "NIE"); } return 0; } inline void generate(void) { fib[0] = 0; fib[1] = 1; for(fibs = 2; fibs < 64 && fib[fibs - 1] <= 1000000000; ++ fibs) fib[fibs] = fib[fibs - 2] + fib[fibs - 1]; } inline bool check(int num) { if(!num) return true; for(int f = 1, g = fibs - 1; f < fibs && fib[f] <= num; ++ f) { while(g > 0 && fib[g] > num / fib[f]) -- g; if(num / fib[f] == fib[g] && (num % fib[f]) == 0) return true; } return false; } |