zoukankan      html  css  js  c++  java
  • 递推 hdu 3411

    http://blog.csdn.net/wust_xhj/article/details/47779539

    怎么推可以看这里  

    f[0]=0

    f[1]=1

    [0,1]* | 0  q  |(n-1)=[f(n-1),f(n)]

         | 1 q-1|

    跑一下快速幂

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<math.h>
    
    using namespace std;
    typedef long long ll;
    #define MAXN 105
    
    struct node
    {
        ll z[3][3];
    };
    ll Quick(ll a,ll b,ll c)
    {
        ll ans=1;
        while(b>0)
        {
            if(b%2==1)
                ans=(ans*a)%c;
            b/=2;
            a=(a*a)%c;
        }
        return ans;
    }
    ll p;
    node mou(node a,node b)
    {
        node c;
        for(int i=0;i<2;i++)
        {
            for(int j=0;j<2;j++)
            {
                ll sum=0;
                for(int k=0;k<2;k++)
                    sum=(sum+a.z[i][k]*b.z[k][j])%p;
                c.z[i][j]=sum;
            }
        }
        return c;
    }
    int main()
    {
        ll x1,y1,z1,y2,z2;
        while(scanf("%lld%lld%lld",&x1,&y1,&z1)!=EOF)
        {
            if(x1==-1&&y1==-1&&z1==-1)
                break;
            scanf("%lld%lld%lld",&y2,&z2,&p);
            ll q=(Quick(x1,y1,p)+z1)%p;
            node s,a,ans;
            ans.z[0][0]=1;
            ans.z[0][1]=0;
            ans.z[1][0]=0;
            ans.z[1][1]=1;
            a.z[0][0]=0;
            a.z[0][1]=q;
            a.z[1][0]=1;
            a.z[1][1]=q-1;
            s=a;
            while(z2>0)
            {
                if(z2%2==1)
                    ans=mou(ans,a);
                z2=z2/2;
                a=mou(a,a);
            }
            for(int i=0;i<y2;i++)
            {
                ans=mou(s,ans);
                s=mou(s,s);
            }
            printf("%d
    ",ans.z[1][1]);
    
        }
        return  0;
    }
  • 相关阅读:
    腾讯云学习笔记
    STL常见容器的理解
    C++STL
    Ubuntu:查看目录或文件信息 ls
    安装Ubuntu(通过U盘启动盘)
    C++基础知识
    C++ OpenCV常用的一些函数
    sqlite3主键,外键
    Windows下 Qt添加新模块
    IDE将C++源码生成为可执行文件过程
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/6240986.html
Copyright © 2011-2022 走看看