首页 > 其他 > 详细

bzoj3713[PA2014]Iloczyn*

时间:2016-08-16 23:58:27      阅读:303      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!