【gdgzeroi】Problem A: Fibonacci

【问题描述】

豆豆最近迷上了Fibonacci数,然后他开始研究Fibonacci数的乘积。现在他想问你某个数能不能分解成两个Fibonacci数的乘积?

Fibonacci数的定义:F0=0,F1=1,Fk=Fk-1+Fk-2。

【输入格式】

第一行一个整数T代表提问次数。

接下来T行,每行一个数字A表示豆豆询问你的数。

【输出格式】

对于每次提问,如果这个数可以被分解成两个Fibonacci数的成绩输出“Yes”,否则输出“No”。

【输入样例】

5

5

4

12

11

10

【输出样例】

Yes

Yes

No

No

Yes

【数据范围】

对于50%的数据:A≤50;

对于100%的数据:T≤100,0≤A≤109 。

思路

由于fib数列增长很快,所以109以内的fib数只有不足50个。

所以预处理满足要求的数就好了。

注意0。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=57;
ll a[N],x;int n;
int main()
{
    a[0]=0;a[1]=1;
    for(int i=2; i<=50; i++) a[i]=a[i-1]+a[i-2];
    scanf("%d",&n);
    while (n--)
    {
        scanf("%lld",&x);int b=0;
        for(int i=0;i<=50;i++)
            for(int j=0;j<=50;j++)
            if(a[i]*a[j]==x)
            {
                b=1; break;
            }
        if(!b) printf("No\n"); else printf("Yes\n");
    }
}

发布了703 篇原创文章 · 获赞 392 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/Eric1561759334/article/details/100551786