求一个数是否为两个fibonacci数的乘积
数据组数T
≤100
,n
≤109
好吧小于等于
109
的fibonacci数只有45个,暴力即可
#include<bits/stdc++.h>
using namespace std;
inline long long getint(){
int x=0,p=1;
char c=getchar();
while(!isdigit(c)){
if(c=='-')p=-1;
c=getchar();
}
while(isdigit(c)){
x=(x<<3)+(x<<1)+(c^'0');
c=getchar();
}
return x*p;
}
long long f[100];
int cur;
inline void pre(){
f[0]=0,f[1]=1;
cur=2;
do{
f[cur]=f[cur-1]+f[cur-2];
}while(f[cur++]<=1000000000);
--cur;
}
inline void work(long long a){
bool flag=0;
for(int i=0;i<=cur;++i){
for(int j=0;j<=cur;++j){
if(f[i]*f[j]==a){
flag=1;
break;
}
}
}
cout<<(flag?"Yes\n":"No\n");
}
int main(){
pre();
int t=getint();
while(t--){
work(getint());
}
return 0;
}