#include <stdio.h> #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) int fibo[] = { 1, /* 0 */ 2, /* 1 */ 3, /* 2 */ 5, /* 3 */ 8, /* 4 */ 13, /* 5 */ 21, /* 6 */ 34, /* 7 */ 55, /* 8 */ 89, /* 9 */ 144, /* 10 */ 233, /* 11 */ 377, /* 12 */ 610, /* 13 */ 987, /* 14 */ 1597, /* 15 */ 2584, /* 16 */ 4181, /* 17 */ 6765, /* 18 */ 10946, /* 19 */ 17711, /* 20 */ 28657, /* 21 */ 46368, /* 22 */ 75025, /* 23 */ 121393, /* 24 */ 196418, /* 25 */ 317811, /* 26 */ 514229, /* 27 */ 832040, /* 28 */ 1346269, /* 29 */ 2178309, /* 30 */ 3524578, /* 31 */ 5702887, /* 32 */ 9227465, /* 33 */ 14930352, /* 34 */ 24157817, /* 35 */ 39088169, /* 36 */ 63245986, /* 37 */ 102334155, /* 38 */ 165580141, /* 39 */ 267914296, /* 40 */ 433494437, /* 41 */ 701408733, /* 42 */ }; int is_fibo(int k) { int i; for(i = 0; i < ARRAY_SIZE(fibo); i++) { if(fibo[i] == k) return 1; if(fibo[i] > k) break; } return 0; } int calc(int k) { int i, p, f; for(i = 0; i < ARRAY_SIZE(fibo); i++) { f = fibo[i]; if(k % f == 0) { p = k / f; if(is_fibo(p)) return 1; } } return 0; } int main() { int n, k; scanf("%d", &n); while(n-- > 0) { scanf("%d", &k); printf("%s\n", calc(k) ? "TAK" : "NIE"); } return 0; }
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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #include <stdio.h> #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) int fibo[] = { 1, /* 0 */ 2, /* 1 */ 3, /* 2 */ 5, /* 3 */ 8, /* 4 */ 13, /* 5 */ 21, /* 6 */ 34, /* 7 */ 55, /* 8 */ 89, /* 9 */ 144, /* 10 */ 233, /* 11 */ 377, /* 12 */ 610, /* 13 */ 987, /* 14 */ 1597, /* 15 */ 2584, /* 16 */ 4181, /* 17 */ 6765, /* 18 */ 10946, /* 19 */ 17711, /* 20 */ 28657, /* 21 */ 46368, /* 22 */ 75025, /* 23 */ 121393, /* 24 */ 196418, /* 25 */ 317811, /* 26 */ 514229, /* 27 */ 832040, /* 28 */ 1346269, /* 29 */ 2178309, /* 30 */ 3524578, /* 31 */ 5702887, /* 32 */ 9227465, /* 33 */ 14930352, /* 34 */ 24157817, /* 35 */ 39088169, /* 36 */ 63245986, /* 37 */ 102334155, /* 38 */ 165580141, /* 39 */ 267914296, /* 40 */ 433494437, /* 41 */ 701408733, /* 42 */ }; int is_fibo(int k) { int i; for(i = 0; i < ARRAY_SIZE(fibo); i++) { if(fibo[i] == k) return 1; if(fibo[i] > k) break; } return 0; } int calc(int k) { int i, p, f; for(i = 0; i < ARRAY_SIZE(fibo); i++) { f = fibo[i]; if(k % f == 0) { p = k / f; if(is_fibo(p)) return 1; } } return 0; } int main() { int n, k; scanf("%d", &n); while(n-- > 0) { scanf("%d", &k); printf("%s\n", calc(k) ? "TAK" : "NIE"); } return 0; } |