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

0 1 0 6 10 2

Sample Output

0 60

解题思路:这道题题意很好懂,就是有多组测试数据,每组数据包括a,b,n( 0 <= a, b, n <= 10^9 )(所以均需要用long long型)然后可以利用矩阵快速幂求出对应n值的a的幂value2和b的幂value1,由于value2和value1都非常大,可能超过long long 型,且又分别作为a的幂和b的幂,由费马小定理(a^b%mod=a^(b%(mod-1))%mod)分别给a和b降幂,最后即可计算出结果;

代码如下:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
//构造结构体
struct matrix{ll m[2][2];matrix(){memset(m,0,sizeof(m));    }
};
//矩阵相乘
matrix mat_multi(matrix a,matrix b){matrix c;for(int i=0;i<2;i++){for(int j=0;j<2;j++){c.m[i][j]=0;for(int k=0;k<2;k++){c.m[i][j]+=(a.m[i][k]*b.m[k][j])%(mod-1);c.m[i][j]%=(mod-1);}}}return c;
}
//矩阵快速幂
matrix mat_quickpow(matrix d,ll e){matrix ans;for(int i=0;i<2;i++){for(int j=0;j<2;j++){if(i==j) ans.m[i][j]=1;else ans.m[i][j]=0;}}while(e){if(e&1) ans=mat_multi(ans,d);d=mat_multi(d,d);e/=2; }return ans;
}
//快速幂
ll quickpow(ll a,ll b){ll sum2=1;while(b){if(b&1) sum2=(sum2*a)%mod;a=(a*a)%mod; b/=2;}return sum2;
}
//主函数
int main(){ll a,b,n;while(scanf("%lld %lld %lld",&a,&b,&n)!=EOF){matrix ans,d;ll value1,value2;ll sum2=0;ll sum=0;d.m[0][0]=d.m[0][1]=d.m[1][0]=1;d.m[1][1]=0;ans=mat_quickpow(d,n);value1=ans.m[0][1];value2=ans.m[1][1];sum2=(quickpow(a,value2)*quickpow(b,value1))%mod;printf("%lld\n",sum2);}    return 0;
}

转载于:https://www.cnblogs.com/jianqiao123/p/11438418.html

HDU4549 M斐波那契数列(矩阵快速幂+费马小定理)相关推荐

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

    ps:今天和战友聊到矩阵快速幂,想到前几天学长推荐去刷矩阵专题,挑了其中唯一一道中文题,没想到越过山却被河挡住去路... 题目链接:[kuangbin带你飞]专题十九 矩阵 R - M斐波那契数列 T ...

  2. HDU - 5667 Sequence(矩阵快速幂+费马小定理降幂)

    题目链接:点击查看 题目大意:给出函数f(x): 现给出n,a,b,c,mod,求f(n)对mod取模后的结果 题目分析:这个题目相对于前几个题来说稍微加大了点难度,但还是挺水的一个题,首先我们可以对 ...

  3. 斐波那契数列矩阵快速幂

    题意 用矩阵乘法求fibonacci数列的第n项. Solution 矩乘入门题啊,题目把题解已经说的很清楚里= =. 矩乘其实很简单,通过自己YY或者是搜索对于一个递推公式求出它所对应的矩阵,然后套 ...

  4. 奶牛家族(斐波那契数列的快速幂乘矩阵算法)

    TX面试题: 已知有一头牛4年后开始生小牛,一次只能生一只,问20年后一共有多少头牛? 这种问题就是简单的递归: 这头奶牛在第四年后能不断生子直到第二十年,其子出生4年后又能不断生子-- 代码如下: ...

  5. YBTOJ:斐波拉契(矩阵快速幂)

    文章目录 题目描述 题目描述 代码 题目描述 题目描述 关键在于如何转化为本题的题目... 设 y=(1-根号5)/2$$ 再令: A(n)=xn +++ yn 通过尝试可以发现,A其实就是一个1,3 ...

  6. 牛客15666 又见斐波那契(矩阵快速幂)

    链接:https://ac.nowcoder.com/acm/problem/15666 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  7. 蓝桥杯历届试题----斐波那契(矩阵快速幂)

    问题描述 斐波那契数列大家都非常熟悉.它的定义是: f(x) = 1 -. (x=1,2) f(x) = f(x-1) + f(x-2) -. (x>2) 对于给定的整数 n 和 m,我们希望求 ...

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

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

  9. [ZJOI2011]细胞——斐波那契数列+矩阵加速+dp

    Description bzoj2323 Solution 题目看起来非常复杂. 本质不同的细胞这个条件显然太啰嗦, 是否有些可以挖掘的性质? 1.发现,只要第一次分裂不同,那么互相之间一定是不同的( ...

最新文章

  1. 来体验一把职场人的真实训练,检验你的工程化交付能力!
  2. 中国「人造太阳」刚刚再破纪录:运行时间突破千秒,负责人:为稳态的聚变工程堆奠定基础...
  3. 2021高考东莞高中成绩查询,东莞2021高考成绩查询系统入口
  4. Response.Redirect(x.aspx);跳转后session为null的解决方法
  5. linux fastQC 操作命令,linux-ubuntu下fastQC的安裝及使用
  6. Spring MVC(三)--控制器接受普通请求参数
  7. iOS开发cocoaPod的使用
  8. archlinux使用sudo
  9. 在百度超级链Xuper上部署智能合约并实现存证功能
  10. asp.net C#实现下载文件的六种方法实例
  11. Ubuntu命令技巧
  12. H3C V7控制器无线优化关闭低速率
  13. 摄像机标定到底是在干什么?
  14. Android麦克风探测器
  15. 【MOOS系统安装步骤】
  16. 倾斜摄影超大场景的三维模型轻量化与三维展示效果的关系浅析
  17. LInux 实训二记录
  18. 锂离子电池热失控预警资料整理(二)
  19. 对比学习+分割 | 论文阅读
  20. 19C环境ORA-01035登陆报错处理

热门文章

  1. maven no Maven Dependencies view
  2. C# WinForm 在窗口菜单上显示已打开窗体的标题及其窗体的排列
  3. [公告]我的Live Spaces - 读书空间
  4. 怎么用python读取csv文件、并且是读取行-使用python获取csv文本的某行或某列数据的实例...
  5. python3语法错误-【Python3之异常处理】
  6. 简单python画圣诞树图片-圣诞节!教你用 Python 画棵圣诞树
  7. python编程工资-2019年Python就业薪资怎么样?看完你就了解了
  8. 西安python工资怎么样-干货|python人工智能工程师工资多少钱
  9. 如何用python画圆形的代码-简单实现python画圆功能
  10. python软件界面-用Html来写Python桌面软件的UI界面-htmlPy