zoukankan      html  css  js  c++  java
  • hdu 1005 Number Sequence(矩阵快速幂,找规律,模版更通用)

    题目

    第一次做是看了大牛的找规律结果,如下:

    //显然我看了答案,循环节点是48,但是为什么是48,据说是高手打表出来的
    #include<stdio.h>
    int main()
    {
        int f[50],a,b,i,n;
        f[1]=1;f[2]=1;
        while(scanf("%d%d%d",&a,&b,&n)!=EOF)
        {
            if(a==0&&b==0&&n==0)break;
    
            for(i=3;i<49;i++)
            {
                f[i]=(a*f[i-1])%7+(b*f[i-2])%7;
            }
            printf("%d
    ",f[n%48]%7);
        }
        return 0;
    }
    View Code

    第二次做是学了矩阵快速幂,这是经典的矩阵快速幂简单题

    //简单的矩阵快速幂
    //f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
    //注意origin矩阵中的第二行的a和b的位置摆放
    #include<stdio.h>
    #include<string.h>
    int num=2,mod=7;
    struct matrix
    {
        int a[2][2];
    };
    matrix multiply(matrix x,matrix y)//矩阵乘法
    {
        matrix temp;
        memset(temp.a,0,sizeof(temp.a));
        for(int i=0;i<num;i++)
        {
            for(int k=0;k<num;k++)
            {
                for(int j=0;j<num;j++)
                {
                    temp.a[i][j]=(temp.a[i][j]+x.a[i][k]*y.a[k][j])%mod;
                }
            }
        }
        return temp;
    }
    matrix calc(matrix a,int n)//矩阵快速幂——a^n
    {
        if(n==1)return a;
        matrix e;
        for(int i=0;i<num;i++)
            for(int j=0;j<num;j++)
                e.a[i][j]=(i==j);
    
        while(n)
        {
            if(n&1)
                e=multiply(e,a);
            n>>=1;
            a=multiply(a,a);
        }
        return e;
    }
    int main()
    {
        int n,a,b;
        while(scanf("%d%d%d",&a,&b,&n)!=EOF)
        {
            if(a==0&&b==0&&n==0)break;
            matrix origin= {0,1};
            origin.a[1][0]=b;origin.a[1][1]=a;
            matrix answ={1,0,
                         1,0};        
            if(n>2)
                answ=multiply(calc(origin,n-2),answ);
            printf("%d
    ",answ.a[1][0]);
        }
        return 0;
    }
    View Code
    一道又一道,好高兴!
  • 相关阅读:
    asp.net 中input radio checked 无效
    AD对象DirectoryEntry本地开发
    Linux部署
    spring 定时任务配置使用
    闲言碎语
    javascript 折后保留一位小数
    JSON 实力应用
    水晶报表(crystal report )中显示CheckBox
    html 笔记
    转载-js按回车键实现登陆-myself
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3567663.html
Copyright © 2011-2022 走看看