#include <bits/stdc++.h>
using namespace std;
#define name "FIBO"
const int MAXX = 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;
bool F[MAXX];
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 tao_mang_Fibonacci(){
memset(F, false, sizeof(F)); // Đặt tất cả các số trong mảng thành false
F[1] = true; // Đặt số 1 là true (số 1 thuộc dãy fibonacci)
int a = 1, b = 1, c = a + b;
while (c < MAXX){
F[c] = true; // Đặt c là true (c thuộc dãy fibonacci)
a = b; b = c;
c = a + b;
}
}
void cach2(){
cin >> x;
if (F[x] == true) cout << "YES\n"; // Kiểm tra, nếu đúng thì in ra YES
else cout << "NO\n";
}
int main(){
setIO(); // Nhập xuất file
cin >> q;
tao_mang_Fibonacci();
for (int i = 0; i<q; i++) cach2();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIG5hbWUgIkZJQk8iCmNvbnN0IGludCBNQVhYID0gMmU1KzU7CgovKgpCw6BpIG7DoHkgY8OzIDIgY8OhY2ggbMOgbToKKyBDw6FjaCAxICjEkOG7mSBwaOG7qWMgdOG6oXAgbOG7m24gaMahbiwgY29kZSBjaOG6oXkgbMOidSBoxqFuKQogICAgLSBCMTogTmjhuq1wIG4sIG5o4bqtcCB04burbmcgdHJ1eSB24bqlbiAodsOtIGThu6U6IE5o4bqtcCBz4buRIFgpCiAgICAKICAgIC0gQjI6IFjDqXQgdOG7q25nIHRydXkgduG6pW4gY+G7mW5nIGThuqduIGPDoWMgc+G7kSBj4bunYSBkw6N5IGZpYm9uYWNjaSBhLCBiLCBjID0gYSArIGIKICAgICAgLS0+IEtp4buDbSB0cmEgY8OhYyBz4buRIGEsYixjIGPDsyB0csO5bmcgduG7m2kgc+G7kSBYIGtow7RuZwogICAgICAtLT4gTuG6v3UgdHLDuW5nIGluIHJhIFlFUywga2jDtG5nIHRyw7luZyBpbiByYSBOTwogICAgCisgQ8OhY2ggMiAoxJDhu5kgcGjhu6ljIHThuqFwIE8oTUFYKSAoTUFYIGzDoCBz4buRIGZpYm9uYWNjaSBjdeG7kWkgY8O5bmcpLCBjb2RlIGNo4bqheSBuaGFuaCBoxqFuKQogICAgLSBCMTogQ+G7mW5nIGThuqduIGPDoWMgc+G7kSBGaWJvbmFjY2kgdOG7qyAxIMSR4bq/biBNQVggKHbDrSBk4bulIGLDoGkgbsOgeSBsw6AgMioxMF41ICsgNSkKICAgICAgICAgIFThuqFvIG3huqNuZyBGW10gKGtp4buDdSBk4buvIGxp4buHdSBib29sKSDEkeG7gyBraeG7g20gdHJhIHPhu5EgY8OzIHRodeG7mWMgZMOjeSBGaWJvbmFjY2kga2jDtG5nPwogICAgICAgICAgVsOtIGThu6U6IHPhu5EgMyB0aHXhu5ljIGTDo3kgZmlib25hY2NpIHRow6w6IEZbM10gPSB0cnVlOwogICAgCiAgICAtIEIyOiBOaOG6rXAgdHJ1eSB24bqlbiAoVkQ6IE5o4bqtcCBz4buRIFgpLCBraeG7g20gdHJhIEZbWF0gPT0gdHJ1ZSB0aMOsIGluIHJhIFlFUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaW4gcmEgTk8KKi8KCmludCBuLCBxLCB4Owpib29sIEZbTUFYWF07Cgp2b2lkIHNldElPKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4obmFtZSIuaW5wIiwgInIiKSl7CiAgICAgICAgZnJlb3BlbihuYW1lIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKG5hbWUiLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KfQoKdm9pZCB0YW9fbWFuZ19GaWJvbmFjY2koKXsKICAgIG1lbXNldChGLCBmYWxzZSwgc2l6ZW9mKEYpKTsgLy8gxJDhurd0IHThuqV0IGPhuqMgY8OhYyBz4buRIHRyb25nIG3huqNuZyB0aMOgbmggZmFsc2UKICAgIEZbMV0gPSB0cnVlOyAvLyDEkOG6t3Qgc+G7kSAxIGzDoCB0cnVlIChz4buRIDEgdGh14buZYyBkw6N5IGZpYm9uYWNjaSkKICAgIGludCBhID0gMSwgYiA9IDEsIGMgPSBhICsgYjsKICAgIHdoaWxlIChjIDwgTUFYWCl7CiAgICAgICAgRltjXSA9IHRydWU7IC8vIMSQ4bq3dCBjIGzDoCB0cnVlIChjIHRodeG7mWMgZMOjeSBmaWJvbmFjY2kpCiAgICAgICAgYSA9IGI7IGIgPSBjOwogICAgICAgIGMgPSBhICsgYjsKICAgIH0KfQoKdm9pZCBjYWNoMigpewogICAgY2luID4+IHg7CiAgICBpZiAoRlt4XSA9PSB0cnVlKSBjb3V0IDw8ICJZRVNcbiI7IC8vIEtp4buDbSB0cmEsIG7hur91IMSRw7puZyB0aMOsIGluIHJhIFlFUwogICAgZWxzZSBjb3V0IDw8ICJOT1xuIjsKICAgIAp9CgppbnQgbWFpbigpewogICAgc2V0SU8oKTsgLy8gTmjhuq1wIHh14bqldCBmaWxlCiAgICBjaW4gPj4gcTsKICAgIHRhb19tYW5nX0ZpYm9uYWNjaSgpOwogICAgZm9yIChpbnQgaSA9IDA7IGk8cTsgaSsrKSBjYWNoMigpOwp9