Fibonacci
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1857 Accepted Submission(s): 467
Problem Description
Following is the recursive definition of Fibonacci sequence:
Now we need to check whether a number can be expressed as the product of numbers in the Fibonacci sequence.
Fi=⎧⎩⎨01Fi−1+Fi−2i = 0i = 1i > 1
Now we need to check whether a number can be expressed as the product of numbers in the Fibonacci sequence.
Input
There is a number
T
shows there are
T
test cases below. (
T≤100,000
)
For each test case , the first line contains a integers n , which means the number need to be checked.
0≤n≤1,000,000,000
For each test case , the first line contains a integers n , which means the number need to be checked.
0≤n≤1,000,000,000
Output
For each case output "Yes" or "No".
Sample Input
3 4 17 233
Sample Output
Yes No Yes
#include<iostream>
#include<cstring>
#include<cstdio>
#include<ostream>
#include<istream>
#include<algorithm>
#include<queue>
#include<string>
#include<cmath>
#include<set>
#include<map>
#include<stack>
#include<vector>
#define fi first
#define se second
#define ll long long
#define pii pair<int,int>
#define inf (1ll<<60)
#define eps 1e-8
#define pb push_back
using namespace std;
const int maxn=110005;
int n;
ll d[1000];
map<ll,int>mp;
set<ll>se;
void gao()
{
ll N=1000000000;
queue<ll>que;
for(int i=0;i<=45;i++) {
que.push(d[i]);
mp[d[i]]=1;
se.insert(d[i]);
}
while(!que.empty()) {
ll u=que.front();
que.pop();
for(int i=3;i<=45;i++) {
ll v=u*d[i];
if(v>N)
break;
if(mp.count(v))
continue;
mp[v]=1;
que.push(v);
se.insert(v);
}
}
}
int main()
{
d[0]=0; d[1]=1;
for(int i=2;i<=45;i++) {
d[i]=d[i-2]+d[i-1];
}
gao();
int t;
scanf("%d",&t);
ll n;
while(t--) {
scanf("%I64d",&n);
if(*se.lower_bound(n)==n)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}