zoukankan      html  css  js  c++  java
  • hdu 1005

    这一题用到了快速幂的方法,还有就是构造矩阵……

    #include "stdio.h"
    #include "string.h"


    void mult(int f[2][2],int y[2][2],int c[2][2])//求矩阵相乘
    {
     int i;
     int a[2][2],b[2][2];
     memcpy(a,f,sizeof(int)*4);//这里也,要将数组复制过来,否则是会出错的,因为传过来的有可能是相同的矩阵相乘……
     memcpy(b,y,sizeof(int)*4);
     for(i=0;i<2;i++)
     {
      c[i][0]=(a[i][0]*b[0][0]+a[i][1]*b[1][0])%7;
      c[i][1]=(a[i][0]*b[0][1]+a[i][1]*b[1][1])%7;
     }
    }

    void pow(int f[2][2],int n)
    {
     int s[2][2]={1,0,0,1};
     int a[2][2];
     int i;

     memcpy(a,f,sizeof(int)*4);//最好还是将原来的数组复制过来,这样我个人感觉也可以少犯一些错误
     
     for(i=0;n!=0;i++)//用快速幂的方法求a^n
     {
      if(n&(1<<i))
       mult(s,a,s);
      mult(a,a,a);
      n&=~(1<<i);
     }

     memcpy(f,s,sizeof(int)*4);
    }

    int main()
    {
     int a,b,n;
     int ditui[2][2]={0,1,1,1};
     
     while(scanf("%d%d%d",&a,&b,&n)==3)
     {
      if(a==0&&b==0&&n==0)
       break;
      ditui[0][0]=0;
      ditui[1][0]=1;
      ditui[1][1]=a;
      ditui[0][1]=b;

      if(n<=2)
      {
       printf("1\n");
       continue;
      }

      pow(ditui,n-2);

      printf("%d\n",(ditui[0][1]+ditui[1][1])%7);//最后竟然忘记mod7了,汗~~~
     }

     return 0;
    }

  • 相关阅读:
    推荐Windows下SVN服务器端和客户端工具软件
    QT的一些小知识
    Qt
    Qt
    ADB
    HTTP
    Python
    项目附
    项目
    架构
  • 原文地址:https://www.cnblogs.com/Shirlies/p/2352647.html
Copyright © 2011-2022 走看看