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

     

  • 相关阅读:
    结对第一次—原型设计(文献摘要热词统计)
    第一次作业-准备篇
    201771010135杨蓉庆《面向对象程序设计(java)》第二周学习总结
    杨蓉庆201771010135《面向对象程序设计(java)》第一周学习总结
    2019 SDN阅读作业
    第01组 Alpha冲刺 (2/4)
    2019 SDN上机第3次作业
    第01组 ALPHA冲刺(1/4)
    2019SDN上机第二次作业
    2019 SDN上机第1次作业
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/7587624.html
Copyright © 2011-2022 走看看