[Contest1351]Fibonacci
Posted evan704
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Contest1351]Fibonacci相关的知识,希望对你有一定的参考价值。
题面
Description
【问题描述】
豆豆最近迷上了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 。
题意
一个SB问你一个数能不能被分解成两个Fibonacci数的乘积。
题解
看看数据范围$10^9$,想想Fibonacci数的增长速度,$F[45]>10^9$,嗯好的啥也别说了打暴力。
(TMD这种傻逼题我考场上居然没特判MDZZ)
#include<iostream> using namespace std; int f[50],t,n; int main() f[1]=f[2]=1; for(int i=3;i<=45;i++)f[i]=f[i-1]+f[i-2]; // printf("%d",f[45]); scanf("%d",&t); while(t--) scanf("%d",&n); if(n==0)//特判。。 printf("Yes\n"); continue; bool flag=0; for(int i=1;i<=45;i++) if(f[i]*f[i]>n)break; for(int j=i;j<=45;j++) if(f[i]*f[j]==n) flag=1; break; if(flag)break; if(flag)printf("Yes\n"); else printf("No\n");
以上是关于[Contest1351]Fibonacci的主要内容,如果未能解决你的问题,请参考以下文章