#include <cstdio>
#include <map>
#define FOREACH(i, n) for(int i=0;i<n;i++)
using namespace std;
int F[]={1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155,165580141,267914296,433494437,701408733};
map<int, bool> T;
void T_data(){
T[0]=1;
T[1]=1;
T[1]=1;
T[2]=1;
T[3]=1;
T[5]=1;
T[8]=1;
T[13]=1;
T[21]=1;
T[34]=1;
T[55]=1;
T[89]=1;
T[144]=1;
T[233]=1;
T[377]=1;
T[610]=1;
T[987]=1;
T[1597]=1;
T[2584]=1;
T[4181]=1;
T[6765]=1;
T[10946]=1;
T[17711]=1;
T[28657]=1;
T[46368]=1;
T[75025]=1;
T[121393]=1;
T[196418]=1;
T[317811]=1;
T[514229]=1;
T[832040]=1;
T[1346269]=1;
T[2178309]=1;
T[3524578]=1;
T[5702887]=1;
T[9227465]=1;
T[14930352]=1;
T[24157817]=1;
T[39088169]=1;
T[63245986]=1;
T[102334155]=1;
T[165580141]=1;
T[267914296]=1;
T[433494437]=1;
T[701408733]=1;
}
bool check(int n){
if(T[n])
return true;
FOREACH(i, 43)
if(n%F[i]==0 && T[n/F[i]])
return true;
return false;
}
int main(){
int t, n;
scanf("%d", &t);
T_data();
FOREACH(i, t){
scanf("%d", &n);
printf(check(n) ? "TAK\n" : "NIE\n");
}
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 | #include <cstdio> #include <map> #define FOREACH(i, n) for(int i=0;i<n;i++) using namespace std; int F[]={1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155,165580141,267914296,433494437,701408733}; map<int, bool> T; void T_data(){ T[0]=1; T[1]=1; T[1]=1; T[2]=1; T[3]=1; T[5]=1; T[8]=1; T[13]=1; T[21]=1; T[34]=1; T[55]=1; T[89]=1; T[144]=1; T[233]=1; T[377]=1; T[610]=1; T[987]=1; T[1597]=1; T[2584]=1; T[4181]=1; T[6765]=1; T[10946]=1; T[17711]=1; T[28657]=1; T[46368]=1; T[75025]=1; T[121393]=1; T[196418]=1; T[317811]=1; T[514229]=1; T[832040]=1; T[1346269]=1; T[2178309]=1; T[3524578]=1; T[5702887]=1; T[9227465]=1; T[14930352]=1; T[24157817]=1; T[39088169]=1; T[63245986]=1; T[102334155]=1; T[165580141]=1; T[267914296]=1; T[433494437]=1; T[701408733]=1; } bool check(int n){ if(T[n]) return true; FOREACH(i, 43) if(n%F[i]==0 && T[n/F[i]]) return true; return false; } int main(){ int t, n; scanf("%d", &t); T_data(); FOREACH(i, t){ scanf("%d", &n); printf(check(n) ? "TAK\n" : "NIE\n"); } return 0; } |
English