#include <bits/stdc++.h>
using namespace std;
#define name "FIBO"
const int MAX = 2e5+5;
/*
Bài này có 2 cách làm:
+ Cách 1 (Độ phức tạp lớn hơn, code chạy lâu hơn)
- B1: Nhập n, nhập từng truy vấn (ví dụ: Nhập số X)
- B2: Xét từng truy vấn cộng dần các số của dãy fibonacci a, b, c = a + b
--> Kiểm tra các số a,b,c có trùng với số X không
--> Nếu trùng in ra YES, không trùng in ra NO
+ Cách 2 (Độ phức tạp O(MAX) (MAX là số fibonacci cuối cùng), code chạy nhanh hơn)
- B1: Cộng dần các số Fibonacci từ 1 đến MAX (ví dụ bài này là 2*10^5 + 5)
Tạo mảng F[] (kiểu dữ liệu bool) để kiểm tra số có thuộc dãy Fibonacci không?
Ví dụ: số 3 thuộc dãy fibonacci thì: F[3] = true;
- B2: Nhập truy vấn (VD: Nhập số X), kiểm tra F[X] == true thì in ra YES
else in ra NO
*/
int n, q, x;
int F[MAX];
void setIO(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(name".inp", "r")){
freopen(name".inp", "r", stdin);
freopen(name".out", "w", stdout);
}
}
void cach1(){
cin >> x;
int a = 1, b = 1, c = 0; // a,b,c đại diện 3 số Fibonacci liên tiếp
if (x < 1) cout << "NO\n"; // Số Fibonacci không bé hơn 1 (trong yêu cầu đề)
else if (x == 1) cout << "YES\n"; // 2 Số Fibonacci đầu tiền là số 1, nên phải kiểm tra để tránh nhầm
else{
while (c < x){
c = a + b; // Quy tắc số sau bằng tổng 2 số trước của dãy số Fibonacci
a = b; b = c;
if (x == c){ // Kiểm tra trong vòng lặp, nếu là số Fibonacci thì in ra đúng
cout << "YES\n";
break;
}
}
if (c > x) cout << "NO\n"; // Ra khỏi vòng lặp, phải in ra 'NO' cho kết quả sai
}
}
// void cach2(){
// }
int main(){
setIO(); // Nhập xuất file
cin >> q;
// Giải quyết vấn đề của đề bài đưa ra
for (int i = 0; i<q; i++){
cach1();
}
//cach2();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIG5hbWUgIkZJQk8iCmNvbnN0IGludCBNQVggPSAyZTUrNTsKCi8qCkLDoGkgbsOgeSBjw7MgMiBjw6FjaCBsw6BtOgorIEPDoWNoIDEgKMSQ4buZIHBo4bupYyB04bqhcCBs4bubbiBoxqFuLCBjb2RlIGNo4bqheSBsw6J1IGjGoW4pCiAgICAtIEIxOiBOaOG6rXAgbiwgbmjhuq1wIHThu6tuZyB0cnV5IHbhuqVuICh2w60gZOG7pTogTmjhuq1wIHPhu5EgWCkKICAgIAogICAgLSBCMjogWMOpdCB04burbmcgdHJ1eSB24bqlbiBj4buZbmcgZOG6p24gY8OhYyBz4buRIGPhu6dhIGTDo3kgZmlib25hY2NpIGEsIGIsIGMgPSBhICsgYgogICAgICAtLT4gS2nhu4NtIHRyYSBjw6FjIHPhu5EgYSxiLGMgY8OzIHRyw7luZyB24bubaSBz4buRIFgga2jDtG5nCiAgICAgIC0tPiBO4bq/dSB0csO5bmcgaW4gcmEgWUVTLCBraMO0bmcgdHLDuW5nIGluIHJhIE5PCiAgICAKKyBDw6FjaCAyICjEkOG7mSBwaOG7qWMgdOG6oXAgTyhNQVgpIChNQVggbMOgIHPhu5EgZmlib25hY2NpIGN14buRaSBjw7luZyksIGNvZGUgY2jhuqF5IG5oYW5oIGjGoW4pCiAgICAtIEIxOiBD4buZbmcgZOG6p24gY8OhYyBz4buRIEZpYm9uYWNjaSB04burIDEgxJHhur9uIE1BWCAodsOtIGThu6UgYsOgaSBuw6B5IGzDoCAyKjEwXjUgKyA1KQogICAgICAgICAgVOG6oW8gbeG6o25nIEZbXSAoa2nhu4N1IGThu68gbGnhu4d1IGJvb2wpIMSR4buDIGtp4buDbSB0cmEgc+G7kSBjw7MgdGh14buZYyBkw6N5IEZpYm9uYWNjaSBraMO0bmc/CiAgICAgICAgICBWw60gZOG7pTogc+G7kSAzIHRodeG7mWMgZMOjeSBmaWJvbmFjY2kgdGjDrDogRlszXSA9IHRydWU7CiAgICAKICAgIC0gQjI6IE5o4bqtcCB0cnV5IHbhuqVuIChWRDogTmjhuq1wIHPhu5EgWCksIGtp4buDbSB0cmEgRltYXSA9PSB0cnVlIHRow6wgaW4gcmEgWUVTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpbiByYSBOTwoqLwoKaW50IG4sIHEsIHg7CmludCBGW01BWF07Cgp2b2lkIHNldElPKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4obmFtZSIuaW5wIiwgInIiKSl7CiAgICAgICAgZnJlb3BlbihuYW1lIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKG5hbWUiLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KfQoKCnZvaWQgY2FjaDEoKXsKICAgIGNpbiA+PiB4OwogICAgaW50IGEgPSAxLCBiID0gMSwgYyA9IDA7IC8vIGEsYixjIMSR4bqhaSBkaeG7h24gMyBz4buRIEZpYm9uYWNjaSBsacOqbiB0aeG6v3AKICAgIGlmICh4IDwgMSkgY291dCA8PCAiTk9cbiI7IC8vIFPhu5EgRmlib25hY2NpIGtow7RuZyBiw6kgaMahbiAxICh0cm9uZyB5w6p1IGPhuqd1IMSR4buBKQogICAgZWxzZSBpZiAoeCA9PSAxKSBjb3V0IDw8ICJZRVNcbiI7IC8vIDIgU+G7kSBGaWJvbmFjY2kgxJHhuqd1IHRp4buBbiBsw6Agc+G7kSAxLCBuw6puIHBo4bqjaSBraeG7g20gdHJhIMSR4buDIHRyw6FuaCBuaOG6p20KICAgIGVsc2V7CiAgICAgICAgd2hpbGUgKGMgPCB4KXsKICAgICAgICAgICAgYyA9IGEgKyBiOyAvLyBRdXkgdOG6r2Mgc+G7kSBzYXUgYuG6sW5nIHThu5VuZyAyIHPhu5EgdHLGsOG7m2MgY+G7p2EgZMOjeSBz4buRIEZpYm9uYWNjaSAKICAgICAgICAgICAgYSA9IGI7IGIgPSBjOwogICAgICAgICAgICBpZiAoeCA9PSBjKXsgLy8gS2nhu4NtIHRyYSB0cm9uZyB2w7JuZyBs4bq3cCwgbuG6v3UgbMOgIHPhu5EgRmlib25hY2NpIHRow6wgaW4gcmEgxJHDum5nCiAgICAgICAgICAgICAgICBjb3V0IDw8ICJZRVNcbiI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoYyA+IHgpIGNvdXQgPDwgIk5PXG4iOyAvLyBSYSBraOG7j2kgdsOybmcgbOG6t3AsIHBo4bqjaSBpbiByYSAnTk8nIGNobyBr4bq/dCBxdeG6oyBzYWkgCiAgICB9Cn0KCgovLyB2b2lkIGNhY2gyKCl7CiAgICAKLy8gfQoKaW50IG1haW4oKXsKICAgIHNldElPKCk7IC8vIE5o4bqtcCB4deG6pXQgZmlsZQogICAgY2luID4+IHE7CiAgICAKICAgIC8vIEdp4bqjaSBxdXnhur90IHbhuqVuIMSR4buBIGPhu6dhIMSR4buBIGLDoGkgxJHGsGEgcmEKICAgIGZvciAoaW50IGkgPSAwOyBpPHE7IGkrKyl7CiAgICAgICAgY2FjaDEoKTsKICAgIH0KICAgIC8vY2FjaDIoKTsKfQ==