zoukankan      html  css  js  c++  java
  • poj 3070 Fibonacci(矩阵快速幂,简单)

    题目

    还是一道基础的矩阵快速幂。

    具体的居者的幂公式我就不明示了。

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    int num,mod=10000;
    struct matrix
    {
        int a[2][2];
    };
    
    matrix multiply(matrix x,matrix y)//矩阵乘法
    {
           matrix temp;
           for(int i=0;i<num;i++)
           {
                   for(int j=0;j<num;j++)
                   {
                           int ans=0;
                           for(int k=0;k<num;k++)
                           {
                                   ans+=((x.a[i][k]*y.a[k][j])%mod);
                           }
                           temp.a[i][j]=ans%mod;
                   }
           }
           return temp;
    }
    
    matrix calc(matrix origin,matrix answ,int n)//矩阵快速幂——answ*origin^n
    {
         while(n)
         {
                 if(n%2==1)
                        answ=multiply(origin,answ);
                 origin=multiply(origin,origin);
                 n/=2;
         }
         return answ;
    }
    
    int main()
    {
    
      // freopen("in.txt", "r", stdin);   
      // freopen("out.txt", "w", stdout);  
       int n;
        while(scanf("%d",&n)!=EOF)
        {
            if(n==-1)break;
            matrix origin= {0,1,
                            1,1};
            matrix answ={0,0,
                         1,0};
            num=2;
            if(n==0||n==1)printf("%d
    ",n);
            else
            {
                answ=calc(origin,answ,n-1);
                printf("%d
    ",answ.a[1][0]);
            }
        }
        return 0;
    }
    View Code
    一道又一道,好高兴!
  • 相关阅读:
    去除文件中的空行
    数据分析 numpy matplotlib
    程序员
    c#
    java
    微信小游戏
    小游戏开发手册
    模板
    微信小程序小程序代码构成(.json .js .wxss .wxml)
    微信程序
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3560218.html
Copyright © 2011-2022 走看看