bzoj3713[PA2014]Iloczyn*

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

转载于:https://www.cnblogs.com/YuanZiming/p/5777970.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值