zoukankan      html  css  js  c++  java
  • hdu 4565 So Easy!(矩阵+快速幂)


    题目大意:就是给出a,b,n,m;让你求s(n);

    解题思路:因为n很可能很大,所以一步一步的乘肯定会超时,我建议看代码之前,先看一下快速幂和矩阵快速幂,这样看起来就比较容易,这里我直接贴别人的推导,应该很容易懂。


    看到这里你应该明白了大概吧!好吧现在继续看我的代码吧!!

    AC代码:

    #include<stdio.h>
    long long c[2][2],d[2];
    int main()
    {
        long long a,b,n,m,x,y,p,q;
        while(scanf("%I64d%I64d%I64d%I64d",&a,&b,&n,&m)!=EOF)
        {
            c[0][0]=2*a;
            c[0][1]=b-a*a;
            c[1][0]=1;
            c[1][1]=0;
            d[0]=2*a;
            d[1]=2;
            while(n)//矩阵快速幂的实现过程
            {
                if(n&1)
                {
                    x=(c[0][0]*d[0]+c[0][1]*d[1])%m;
                    y=(c[1][0]*d[0]+c[1][1]*d[1])%m;
                    d[0]=x;
                    d[1]=y;
                }
                n=n/2;
                x=(c[0][0]*c[0][0]+c[0][1]*c[1][0])%m;
                y=(c[0][0]*c[0][1]+c[0][1]*c[1][1])%m;
                p=(c[1][0]*c[0][0]+c[1][1]*c[1][0])%m;
                q=(c[1][0]*c[0][1]+c[1][1]*c[1][1])%m;
                c[0][0]=x;
                c[0][1]=y;
                c[1][0]=p;
                c[1][1]=q;
            }
            printf("%I64d
    ",(d[1]+m)%m);
        }
        return 0;
    }
    



  • 相关阅读:
    使用Dorado框架开发必备参考
    Dorado重用最佳实践
    css布局_web
    dorado学习笔记(二)
    Oracle归档日志删除
    给大家拜年啦!
    悟透JavaScript
    BCM57781网卡驱动下载地址
    win7安装jdk完后配置
    win7删除SVN保存的本地密码
  • 原文地址:https://www.cnblogs.com/james1207/p/3262972.html
Copyright © 2011-2022 走看看