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

浙公网安备 33010602011771号