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;
}