Fibonacci
 
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
 Total Submission(s): 1525    Accepted Submission(s): 387
Problem Description
 
 Following is the recursive definition of Fibonacci sequence:
 
 
 
Fi=⎧⎩⎨01Fi−1+Fi−2i = 0i = 1i > 1
 
Input
 
 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
 
Output
 
For each case output "Yes" or "No".
 
Sample Input
 
3 4 17 233
 
Sample Output
 
Yes No Yes
 
Source
 
BestCoder Round #28 
 
//斐波那契数增长较快
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<set>
using namespace std;
#define LL __int64
LL num[50];
set<LL> s;
set<LL>::iterator it;
int main()
{
int i,j,t,a;
LL x;
num[0]=0;
num[1]=1;
s.insert(0);
s.insert(1);
for(i=2;i<=47;i++)
{
num[i]=num[i-1]+num[i-2];
s.insert(num[i]);
}
for(it=s.begin();it!=s.end();it++)
{
for(j=3;j<=45;j++)
{
x=*it*num[j];
if(x<=1000000000)
s.insert(x);
}
}
scanf("%d",&t);
while(t--)
{
scanf("%d",&a);
if(s.find(a)!=s.end())
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
 









