MF( i ) = a ^ fib( i-1 ) * b ^ fib ( i )   ( i>=3)

mod 1000000007
是质数 , 依据费马小定理  a^phi( p ) = 1 ( mod p )  这里 p 为质数 且 a 比 p小 所以 a^( p - 1 ) = 1 ( mod p )

所以对非常大的指数能够化简  a ^ k % p  == a ^ ( k %(p-1) ) % p

用矩阵高速幂求fib数后代入就可以

M斐波那契数列

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)

Total Submission(s): 1672    Accepted Submission(s): 482

Problem Description
M斐波那契数列F[n]是一种整数数列,它的定义例如以下:



F[0] = a

F[1] = b

F[n] = F[n-1] * F[n-2] ( n > 1 )



如今给出a, b, n,你能求出F[n]的值吗?
 
Input
输入包括多组測试数据;

每组数据占一行,包括3个整数a, b, n( 0 <= a, b, n <= 10^9 )
 
Output
对每组測试数据请输出一个整数F[n]。因为F[n]可能非常大,你仅仅需输出F[n]对1000000007取模后的值就可以,每组数据输出一行。

 
Sample Input
  1. 0 1 0
  2. 6 10 2
 
Sample Output
  1. 0
  2. 60
 
Source
 

  1. /* ***********************************************
  2. Author :CKboss
  3. Created Time :2015年03月12日 星期四 22时44分35秒
  4. File Name :HDOJ4549.cpp
  5. ************************************************ */
  6.  
  7. #include <iostream>
  8. #include <cstdio>
  9. #include <cstring>
  10. #include <algorithm>
  11. #include <string>
  12. #include <cmath>
  13. #include <cstdlib>
  14. #include <vector>
  15. #include <queue>
  16. #include <set>
  17. #include <map>
  18.  
  19. using namespace std;
  20.  
  21. typedef long long int LL;
  22.  
  23. const LL mod=1000000007LL;
  24. const LL md=1000000006LL;
  25.  
  26. /// getfib
  27. LL a,b,n;
  28.  
  29. struct Matrix
  30. {
  31. Matrix(LL a=0,LL b=0,LL c=0,LL d=0)
  32. {
  33. m[0][0]=a; m[0][1]=b;
  34. m[1][0]=c; m[1][1]=d;
  35. }
  36. LL m[2][2];
  37. };
  38.  
  39. Matrix MUI(Matrix& a,Matrix& b)
  40. {
  41. Matrix ret;
  42. ret.m[0][0]=((a.m[0][0]*b.m[0][0])%md+(a.m[0][1]*b.m[1][0])%md)%md;
  43. ret.m[0][1]=((a.m[0][0]*b.m[0][1])%md+(a.m[0][1]*b.m[1][1])%md)%md;
  44. ret.m[1][0]=((a.m[1][0]*b.m[0][0])%md+(a.m[1][1]*b.m[1][0])%md)%md;
  45. ret.m[1][1]=((a.m[1][0]*b.m[0][1])%md+(a.m[1][1]*b.m[1][1])%md)%md;
  46. return ret;
  47. }
  48.  
  49. Matrix QUICKPOW(LL m)
  50. {
  51. Matrix E(1,0,0,1);
  52. Matrix A(1,1,1,0);
  53. while(m)
  54. {
  55. if(m&1LL) E=MUI(E,A);
  56. A=MUI(A,A);
  57. m/=2LL;
  58. }
  59. return E;
  60. }
  61.  
  62. void showMat(Matrix M)
  63. {
  64. cout<<endl;
  65. for(int i=0;i<2;i++)
  66. {
  67. for(int j=0;j<2;j++)
  68. cout<<M.m[i][j]<<",";
  69. cout<<endl;
  70. }
  71. cout<<endl;
  72. }
  73.  
  74. /// get p_th fib number
  75. LL getfib(LL p)
  76. {
  77. p--;
  78. Matrix M1=QUICKPOW(p);
  79. return M1.m[0][0];
  80. }
  81.  
  82. LL QUICKPOW2(LL a,LL x)
  83. {
  84. LL e=1LL;
  85. while(x)
  86. {
  87. if(x&1LL) e=(e*a)%mod;
  88. a=(a*a)%mod;
  89. x/=2LL;
  90. }
  91. return e;
  92. }
  93.  
  94. LL solve()
  95. {
  96. if(n==0) return a;
  97. else if(n==1) return b;
  98. else if(n==2) return (a*b)%mod;
  99.  
  100. ///a的fib系数 -> fib(n-1)
  101. LL xa = getfib(n-1);
  102. LL partA = QUICKPOW2(a,xa);
  103.  
  104. ///b的fib系数 -> fib(i)
  105. LL xb = getfib(n);
  106. LL partB = QUICKPOW2(b,xb);
  107.  
  108. return (partA*partB)%mod;
  109. }
  110.  
  111. int main()
  112. {
  113. //freopen("in.txt","r",stdin);
  114. //freopen("out.txt","w",stdout);
  115.  
  116. while(cin>>a>>b>>n)
  117. cout<<solve()<<endl;
  118.  
  119. return 0;
  120. }

HDOJ 4549 M斐波那契数列 费马小定理+矩阵高速幂的更多相关文章

  1. HDU4549 M斐波那契数列 —— 斐波那契、费马小定理、矩阵快速幂

    题目链接:https://vjudge.net/problem/HDU-4549 M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Li ...

  2. HDU----(4549)M斐波那契数列(小费马引理+快速矩阵幂)

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  3. 【费马小定理+矩阵快速幂】HDU4549——M斐波那契数列

    [题目大意] M斐波那契数列F[n]是一种整数数列,它的定义如下:F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 )现在给出a, b, n,求出F[ ...

  4. HDU 4549 (费马小定理+矩阵快速幂+二分快速幂)

    M斐波那契数列 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  5. HDU 1005 Number Sequence【斐波那契数列/循环节找规律/矩阵快速幂/求(A * f(n - 1) + B * f(n - 2)) mod 7】

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  6. HDOJ 5667 Sequence//费马小定理 矩阵快速幂

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5667 题意:如题给了一个函数式,给你a,b,c,n,p的值,叫你求f(n)%p的值 思路:先对函数取以a为 ...

  7. bzoj5118: Fib数列2(费马小定理+矩阵快速幂)

    题目大意:求$fib(2^n)$ 就是求fib矩阵的(2^n)次方%p,p是质数,根据费马小定理有 注意因为模数比较大会爆LL,得写快速乘法... #include<bits/stdc++.h& ...

  8. HDU 4549 M斐波那契数列(矩阵快速幂+费马小定理)

    M斐波那契数列 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submi ...

  9. Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂)

    Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂) Description 广义的斐波那契数列是指形如\[A_n=p*a_{n-1}+q*a_{n-2}\]的数列.今给定数列的两系数p和q, ...

随机推荐

  1. Java solr 索引数据增删改查

    具体代码如下: import java.io.IOException; import java.util.*; import org.apache.solr.client.solrj.SolrClie ...

  2. 【Linux】pv vg lv, 加盘,扩容磁盘

    PV VG LV关系:一个物理盘(或一个lun)就是一个pv,有几个物理盘就有几个pv.一个或者几个硬盘可以组成一个vg,一个系统可以包括好几个vg,比如rootvg ,datavg等 PV组成VG, ...

  3. 如何在不重启或重新格式化hadoop集群的情况下删除集群节点

    在master节点上的hadoop安装目录下 进入conf目录 配置hdfs-site.xml文件 添加节点如下: <property> <name>dfs.hosts.exc ...

  4. Python3环境安装Scrapy爬虫框架过程及常见错误

    收录待用,修改转载已取得腾讯云授权 Scrapy安装介绍 Scrapy的安装有多种方式,它支持Python2.7版本及以上或Python3.3版本及以上.下面说明Python3环境下的安装过程. Sc ...

  5. Solr报错Index locked for write for core '***'. Solr now longer supports forceful unlocking via 'unlockOnStartup'

    unlockOnStartup 告知 Solr 忽略在多线程环境中用来保护索引的锁定机制.在某些情况下,索引可能会由于不正确的关机或其他错误而一直处于锁定,这就妨碍了添加和更新.将其设置为 true ...

  6. non-compatible bean definition of same name and class

    在整合struts2.1.6+spring2.5.6开发中,使用了注解和struts-convention来实现零配置管理.spring也使用注解annotation方式.现在的问题是:我在连个个不同 ...

  7. EffectManager

    using UnityEngine; using System.Collections; public class EffectManager : MonoBehaviour { public Ani ...

  8. Android开发之Is Library篇

    一.生活场景描述 由于公司有一个项目开发的时间比较长,项目里堆砌的代码也比较多,并且有些功能在给不同客户发布的时候有些功能还不需要,这样功能模块分离就很有必要了. 所以,Library就被推到了前台, ...

  9. C语言中函数调用过程(如何管理栈空间)

    ps:先做草稿,以后有时间再整理并贴图,:) 主要是利用栈底寄存器(ebp).栈顶寄存器(esp)跟eax寄存器(存储返回值)来实现. 假设P调用Q: P() { Q(1,2); } (跟实际情况可能 ...

  10. loadrunner脚本中写入脚本输出log到外部文件,分析参数取值方式

    loadrunner脚本中写入脚本输出log到外部文件,分析参数取值方式 分类: 心得 loadrunner 我的测试 2012-04-01 12:52 2340人阅读 评论(0) 收藏 举报 脚本l ...