[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"); } }