码迷,mamicode.com
首页 > 其他好文 > 详细

[Contest1351]Fibonacci

时间:2019-08-26 14:44:48      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:fibonacci   ++   print   开始   lap   nbsp   ios   for   int   

题面

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

标签:fibonacci   ++   print   开始   lap   nbsp   ios   for   int   

原文地址:https://www.cnblogs.com/Evan704/p/11412258.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!