#include<iostream> #include<set> using namespace std; string isProductOfFibNumbers(int n) { if(n == 1) { return "TAK"; } int f0 = 1, f1 = 1, fi = -1; set<int> divisors; auto it = divisors.insert(1).first; while(fi < n) { fi = f1 + f0; if((n % fi) == 0) { int d = n / fi; if( d == fi || divisors.find(d) != divisors.end()) { return "TAK"; } else { it = divisors.insert(it, fi); } } f0 = f1; f1 = fi; } return "NIE"; } int main() { int T; cin >> T; for(int t = 0; t < T; t++) { int n; cin >> n; cout << isProductOfFibNumbers(n) << endl; } }
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 | #include<iostream> #include<set> using namespace std; string isProductOfFibNumbers(int n) { if(n == 1) { return "TAK"; } int f0 = 1, f1 = 1, fi = -1; set<int> divisors; auto it = divisors.insert(1).first; while(fi < n) { fi = f1 + f0; if((n % fi) == 0) { int d = n / fi; if( d == fi || divisors.find(d) != divisors.end()) { return "TAK"; } else { it = divisors.insert(it, fi); } } f0 = f1; f1 = fi; } return "NIE"; } int main() { int T; cin >> T; for(int t = 0; t < T; t++) { int n; cin >> n; cout << isProductOfFibNumbers(n) << endl; } } |