zoukankan      html  css  js  c++  java
  • neu1250矩阵快速幂哪~~

    其实呢,自己乱测试数据也是会发现BUG的

    一直都会是自己的代码错误!

    折腾了我一大晚上到头来竟然矩阵数组的存储也是long long类型

    不过终归是解决了   稍微学到一点教训吧

    一个是写完代码  自己可以代几组数据试一下  有时候会出现那种很明显的错误  比如这个题出现负数神马啦

    再一个经验是Long long 真的比int 好用??

    自己的程序几乎每个地方都可能超出范围

    再最后是简单的程序也要多练 现在 自己敲一遍矩阵的乘法

    #include<stdio.h>
    #include<string.h>
    #define da 100000007
    struct M
    {
        long long s[3][3];
    };
    struct M multiply(struct M a,struct M b){
        struct M c;
        memset(c.s,0,sizeof(c.s));
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                for(int k=0;k<3;k++)
                    c.s[i][j]=(c.s[i][j]+(a.s[i][k]*b.s[k][j])%da)%da;
        return c;
    }
    struct M paw(struct M a,long long t){
        if(t==1)
            return a;
        else{
            struct M b=paw(a,t/2);
            
            if(t&1){
                return multiply(multiply(b,b),a);
            }
            else
                return multiply(b,b);
        }
    }
    int main()
    {
        struct M a,c;
        a.s[0][0]=3;a.s[0][1]=2;a.s[0][2]=1;
        a.s[1][0]=1;a.s[1][1]=0;a.s[1][2]=0;
        a.s[2][0]=0;a.s[2][1]=1;a.s[2][2]=0;
        int a1,a2,a3;
        long long n;
        while(scanf("%d%d%d%lld",&a1,&a2,&a3,&n)!=EOF)
        {
            if(n==0) { printf("%d\n",a1%da);}
            else if(n==1) {printf("%d\n",a2%da);}
            else if(n==2) { printf("%d\n",a3%da);}
            else{
            c=paw(a,n-2);
            long long x=(c.s[0][0]*(a3%da)+c.s[0][1]*(a2%da)+c.s[0][2]*(a1%da))%da;
            printf("%lld\n",x);
            }
        }
       return 0;
    }
    

      按位与“&”功能强大?

    for(int i=0;i<N;i++)
            for(int j=0;j<N;j++)
               for(int k=0;k<N;k++)
                  {c.s[i][j]+=(a.s[i][k]%da)*(b.s[k][j]%da);
                   c.s[i][j]%=da;//因为各对应行列为i,j
                  }//也对

    以后矩阵快速幂用这个自己写的吧....

  • 相关阅读:
    面向对象
    面向对象
    面向对象
    面向对象
    面向对象
    面向对象
    面向对象
    面向对象
    3.1
    面向对象
  • 原文地址:https://www.cnblogs.com/cgf1993/p/3017226.html
Copyright © 2011-2022 走看看