ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pojFibonacci

2022-05-04 09:33:27  阅读:136  来源: 互联网

标签:matrix int res 矩阵 斐波 那契 pojFibonacci


题目链接:http://poj.org/problem?id=3070

对于昨天未完成的矩阵快速幂计算斐波那契数列的完善

实际上这道题给的暗示已经很明显了,比昨天拿到题明显简单多了。

而这道题倒是给出了一维斐波那契递推式转化成二维斐波那契矩阵的基本原理和计算方法;

 

 而对于这道题的计算,将第一个二维斐波那契矩阵的值按照它的要求赋值即可,然后在进行快速幂矩阵运算;

Talk is cheap. Show me the code.

 1 #include<stdio.h>
 2 #include<iostream>//注意头文件
 3 #include<cmath>
 4 #include<algorithm>
 5 using namespace std;
 6 const int maxn=2;
 7 const int mod=10000;
 8 struct matrix{//定义矩阵
 9     int m[maxn][maxn];
10     matrix()
11     {
12         memset(m,0,sizeof(m));
13     }
14 };
15 matrix multi(matrix a,matrix b)//矩阵乘法运算
16 {
17     matrix res;
18     for(int i=0;i<maxn;i++)
19     {
20         for(int j=0;j<maxn;j++)
21         {
22             for(int k=0;k<maxn;k++)
23             {
24                 res.m[i][j]=(res.m[i][j]+a.m[i][k]*b.m[k][j])%mod;
25             }
26         }
27     }
28     return res;
29 }
30 matrix fastm(matrix a,int n)//快速幂运算
31 {
32     matrix res;
33     for(int i=0; i<maxn; i++)
34        res.m[i][i] = 1;
35        while(n) {
36             if(n&1)    
37             res = multi(res, a);
38             a = multi(a, a);
39             n>>=1;
40        }
41        return res;
42 }
43 int main()
44 {
45     int n;
46     while(scanf("%d",&n)&&n!=-1)
47     {
48         matrix res;
49             matrix a;//按照要求对四个值进行赋值
50         a.m[0][0]=1;
51         a.m[0][1]=1;
52         a.m[1][0]=1;
53         a.m[1][1]=0;
54         res=fastm(a,n);
55         int ans=res.m[0][1]%mod;
56         if(ans==0)
57         cout<<'0'<<endl;
58         else
59         printf("%d\n",res.m[0][1]);
60     }
61     return 0;
62 }

 

标签:matrix,int,res,矩阵,斐波,那契,pojFibonacci
来源: https://www.cnblogs.com/LQS-blog/p/16220372.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有