zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Kefa and Park
    分土地
    果园里的树
    分解质因数
    素数筛
    cantor的数表
    new一个二维数组
    基础练习 十六进制转八进制
    查函数功能
    concatenate函数
  • 原文地址:https://www.cnblogs.com/YuanZiming/p/5777970.html
Copyright © 2011-2022 走看看