#include <cstdlib> #include <iostream> using namespace std; long long tab[100]; int MAXI; #define REP(x,n) for(int x = 0; x < (n); ++x) const int MAXF = 1000 * 1000 * 1000; void wypelnij_tab() { tab[0] = 0; tab[1] = 1; for (MAXI = 2; ; MAXI++) { tab[MAXI] = tab[MAXI - 1]+tab[MAXI - 2]; if (tab[MAXI] > MAXF) break; } } bool czy_iloczyn(long long k) { REP(i, MAXI) REP(j, MAXI) if (tab[i]*tab[j] == k) return true; return false; } int main(int argc, char *argv[]) { wypelnij_tab(); int n; scanf("%d", &n); REP(i,n) { long long k; scanf("%lld",&k ); if (czy_iloczyn(k)) puts("TAK"); else puts("NIE"); } return EXIT_SUCCESS; }
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 | #include <cstdlib> #include <iostream> using namespace std; long long tab[100]; int MAXI; #define REP(x,n) for(int x = 0; x < (n); ++x) const int MAXF = 1000 * 1000 * 1000; void wypelnij_tab() { tab[0] = 0; tab[1] = 1; for (MAXI = 2; ; MAXI++) { tab[MAXI] = tab[MAXI - 1]+tab[MAXI - 2]; if (tab[MAXI] > MAXF) break; } } bool czy_iloczyn(long long k) { REP(i, MAXI) REP(j, MAXI) if (tab[i]*tab[j] == k) return true; return false; } int main(int argc, char *argv[]) { wypelnij_tab(); int n; scanf("%d", &n); REP(i,n) { long long k; scanf("%lld",&k ); if (czy_iloczyn(k)) puts("TAK"); else puts("NIE"); } return EXIT_SUCCESS; } |