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

bzoj3713[PA2014]Iloczyn*

时间:2016-08-16 23:59:02      阅读:333      评论:0      收藏:0      [点我收藏+]

标签:

bzoj3713[PA2014]Iloczyn

题意:

判断给定的数字能否被表示成两个斐波那契数的乘积。n≤10^9

题解:

开始在想有没有什么根号级算法,后来想知道斐波那契数列10000位有多大,结果爆long long了……实际上斐波那契数列到45位就大于10^9了。所以直接枚举即可。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define inc(i,j,k) for(int i=j;i<=k;i++)
 5 #define maxn 45
 6 using namespace std;
 7 
 8 int a[maxn+5]; int t;
 9 int main(){
10     a[1]=1; a[2]=1; inc(i,3,maxn)a[i]=a[i-1]+a[i-2]; scanf("%d",&t);
11     while(t--){
12         int b; scanf("%d",&b); if(b==0){puts("TAK"); continue;} bool f=0;
13         inc(i,1,maxn){
14             inc(j,1,maxn)if((long long)a[i]*a[j]==b){puts("TAK"); f=1; break;}
15             if(f)break;
16         }
17         if(!f)puts("NIE");
18     }
19     return 0;
20 }

 

20160813

bzoj3713[PA2014]Iloczyn*

标签:

原文地址:http://www.cnblogs.com/YuanZiming/p/5777970.html

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