Always keep a beginner's mind, don't f|

luckydrawbox

园龄:4个月粉丝:1关注:2

P5993 [PA2014]Iloczyn

Link\text{Link}

FOI题题都是原题。

分析

[FOI2022]T1,建议红。

斐波那契数列,又称黄金分割数列。该数列具有神奇的特性:数列中每一数字都是其前面两个数字之和。前一数字与后一数字之比趋近于固定常数 0.6180.618。由此可以推算出:当 k=45k=45 时,F45>109F_{45}>10^9

因此我们只要预处理到 F45F_{45} 就可以了,然后再用两层循环枚举判断即可。

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
long long read(){
	long long x=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
	while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
void write(long long x){
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
const int N=50;
ll t,n,f[N];
int main(){
	cin>>t;
	f[0]=0;
	f[1]=1;
	for(int i=2;i<=45;i++)
		f[i]=f[i-1]+f[i-2];
	while(t--){
		cin>>n;
		bool flag=0;
		for(int i=0;i<=45;i++){
			for(int j=i;j<=45;j++){
				if(n==f[i]*f[j]){
					flag=1;
					break;
				}
			}
			if(flag)
				break;
		}
		if(flag)
			cout<<"TAK"<<endl;
		else
			cout<<"NIE"<<endl;
	}
	return 0;
}

本文作者:luckydrawbox

本文链接:https://www.cnblogs.com/luckydrawbox/p/18526544

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   luckydrawbox  阅读(2)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起