• na 残


    题目描述:

      对于斐波那锲数列f(0)=0,f(1)=1,....求f(f(n)的值

      0<=n<=10^100

      给出T组数据,每行一个n

      输出n行 f(f(n))

    样例输入:

      4

      0

      1

      2

      6

    输出:

      0

      1

      1

      21

    思路:

      原来菲波那切数列是个纯周期数列,对于每一个模数MOD,它会有一个最小正周期,那么我们可以把这个很大的数n 或者 f(n) 映射到 一个的小区间,然后矩阵快速幂就OK了

      关于哪个最小正周期的值,暴力去求就行了。

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    #define mo2 329616
    LL n,T;
    LL mod;
    LL M=1000000007;
    LL mo1=M*2+2;
    struct node{
        LL v[2][2];
    }ans,f;
    void Ccin()
    {
        n=0;
        LL q=getchar();
        while(q<48||q>57)q=getchar();
        while(q>=48&q<=57)
        {
            n=(n*10+q-48)%mo2;
            q=getchar();
        }
    }
    node ch(node a,node b)
    {
        node ans1;
        for(int i=0;i<=1;i++)
        for(int j=0;j<=1;j++)
        {
            ans1.v[i][j]=0;
            for(int k=0;k<=1;k++)
            ans1.v[i][j]=(ans1.v[i][j]+(a.v[i][k]*b.v[k][j])%mod)%mod;
        }
        return ans1;
    }
    void fastlow()
    {
        while(n)
        {
            if(n&1)    ans=ch(ans,f);
            f=ch(f,f);n/=2;
        }
    }
    int main()
    {
        freopen("na.in","r",stdin);
        freopen("na.out","w",stdout);
        scanf("%lld",&T);
        while(T--)
        {
            Ccin();
            ans.v[0][0]=1;ans.v[0][1]=ans.v[1][0]=ans.v[1][1]=0;
            f.v[0][0]=f.v[0][1]=f.v[1][0]=1;f.v[1][1]=0;
            n;
            mod=mo1;
            fastlow();
            n=ans.v[0][1];        
            mod=M;
            ans.v[0][0]=1;ans.v[0][1]=ans.v[1][0]=ans.v[1][1]=0;
            f.v[0][0]=f.v[0][1]=f.v[1][0]=1;f.v[1][1]=0;
            fastlow();
            
            cout<<ans.v[0][1]<<endl;
        }
        return 0;
    }

     

  • 相关阅读:
    解决mysql-8.0.18 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    剑指Offer面试题:28.连续子数组的最大和
    Java BigDecimal
    蓝桥杯 分考场 JAVA
    蓝桥杯 合根植物 JAVA
    蓝桥杯 大臣的旅费 JAVA
    蓝桥杯 危险系数 JAVA
    蓝桥杯 幸运数 JAVA
    【转】对memcached使用的总结和使用场景
    【转】Memcached管理与监控工具----MemAdmin
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/7587624.html
Copyright © 2020-2023  润新知