#include <iostream> #include <vector> using namespace std; const unsigned int MAX=1000000000; vector <int> fib; bool bin (int c) { int l=0,r=fib.size()-1; while (l<=r) { int mid=l+(r-l)/2; if(fib[mid]==c) return 1; else if (fib[mid]>c) r=mid-1; else l=mid+1; } return 0; } void read() { int a=1,b=1; fib.push_back(a); bool p=1; while(a<=MAX && b<=MAX) { if(p) { b+=a; fib.push_back(b); p=0; } else { a+=b; fib.push_back(a); p=1; } } } void solve() { int m,pom; bool p; cin>>m; for (int i=0;i<m;i++) { p=1; cin>>pom; if (bin(pom)) { cout<<"TAK\n"; p=0; } else { int j=1; while (pom/2>=fib[j]) { if (pom%fib[j] ==0 && bin(pom/fib[j])) { cout<<"TAK\n"; p=0; break; } j++; } } if (p) cout<<"NIE\n"; } } int main() { read(); solve(); fib.pop_back(); 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 | #include <iostream> #include <vector> using namespace std; const unsigned int MAX=1000000000; vector <int> fib; bool bin (int c) { int l=0,r=fib.size()-1; while (l<=r) { int mid=l+(r-l)/2; if(fib[mid]==c) return 1; else if (fib[mid]>c) r=mid-1; else l=mid+1; } return 0; } void read() { int a=1,b=1; fib.push_back(a); bool p=1; while(a<=MAX && b<=MAX) { if(p) { b+=a; fib.push_back(b); p=0; } else { a+=b; fib.push_back(a); p=1; } } } void solve() { int m,pom; bool p; cin>>m; for (int i=0;i<m;i++) { p=1; cin>>pom; if (bin(pom)) { cout<<"TAK\n"; p=0; } else { int j=1; while (pom/2>=fib[j]) { if (pom%fib[j] ==0 && bin(pom/fib[j])) { cout<<"TAK\n"; p=0; break; } j++; } } if (p) cout<<"NIE\n"; } } int main() { read(); solve(); fib.pop_back(); return 0; } |