hdu4549 M斐波那契数列
题意:F[0] = a ,F[1] = b,F[n] = F[n-1] * F[n-2] ( n > 1 )
现在给出a, b, n,你能求出F[n]的值
想到点子上就很简单了,可当时做的时候都没有向找递推式的方向去思考
1.找F[n]的递推式附:斐波那契数矩阵公式
Fn+1 Fn 1 1
= 的n次方
Fn Fn-1 1 0
#include <bits/stdc++.h>
#define X 10005
#define inf 0x3f3f3f3f
#define PI 3.141592653589793238462643383
using namespace std;
typedef long long ll;
const int mod=1e9+7;
struct node
{ll e[2][2];
} f;
node Matrix(node a,node b)
{node ans;for(int i=0; i<2; ++i){for(int j=0; j<2; ++j){ans.e[i][j]=0;for(int k=0; k<2; ++k)if(a.e[i][k]&&b.e[k][j])//ans.e[i][j]=(ans.e[i][j]+(a.e[i][k]*b.e[k][j])%(mod-1))%(mod-1); 相等ans.e[i][j]=(ans.e[i][j]+(a.e[i][k]*b.e[k][j]))%(mod-1);}}return ans;
}
node Pow(node a,int n)
{node E;E.e[0][0]=E.e[1][1]=1;E.e[0][1]=E.e[1][0]=0;while(n){if(n&1) E=Matrix(E,a);a=Matrix(a,a);n/=2;}return E;
}
ll Pow_(ll a,ll n)
{ll ans=1;while(n){if(n&1)ans=ans*a%mod;a=a*a%mod;n/=2;}return ans%mod;
}
int main()
{ll a,b,n;while(scanf("%lld %lld %lld",&a,&b,&n)!=EOF){f.e[0][0]=f.e[0][1]=f.e[1][0]=1,f.e[1][1]=0;if(n==0){cout<<a<<endl;}else{f=Pow(f,n-1);ll x=f.e[1][0];ll y=f.e[0][0];printf("%lld\n",Pow_(a,x)*Pow_(b,y)%mod);}}return 0;
}
hdu4549 M斐波那契数列相关推荐
- HDU4549 M斐波那契数列 —— 斐波那契、费马小定理、矩阵快速幂
题目链接:https://vjudge.net/problem/HDU-4549 M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Li ...
- HDU4549 M斐波那契数列(矩阵快速幂+费马小定理)
Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) ...
- hdu-4549 M斐波那契数列 nyoj - 1000
运用费马小定理&&矩阵快速幂 求出 a , b 的个数 运用快速幂求解 a^num1 * b ^ num2 % MOD #include<stdio.h> #includ ...
- M斐波那契数列(HDU-4549)
Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ...
- java 斐波拉_Java实现斐波那契数列
斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n&g ...
- 剑指offer:面试题10- I. 斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 ...
- 用递归法计算斐波那契数列的第n项
斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1, ...
- 循环斐波那契数列_剑指offer #10 斐波那契数列
(递归和循环)#10 斐波那契数列 一.斐波那契数列 定义: n = 0 , f(n) = 0 n = 1 , f(n) = 1 n > 1 , f(n) = f(n-1) + f(n-2) 思 ...
- 用C语言编写:判断一个≥2的整型数是否存在于斐波那契数列中?
自己写的,感觉挺有成就感的,就展示出来吧! 判断一个≥2的整型数是否存在于斐波那契数列中? 若存在,则返回第几项:若不在,则返回-1 #include <stdio.h> long gen ...
最新文章
- 数据结构 判断单链表是否有环 C
- 方法中的参数的五种形式
- 2019-12-03 有用的学术网站
- 19岁「天才少年」自制CPU!1200个晶体管,纯手工打造
- Flask练手项目之通讯录
- python paramiko并发_python paramiko 多线程批量执行指令及批量上传文件和目录
- web安全day20:今天讲清楚漏洞和木马的区别,最后一个实验演示通过445端口控制服务器
- 解决最新版chrome不能安装IDM插件IDMGCExt.crx的问题
- 《上海悠悠接口自动化平台》-5.测试计划与定时任务
- javascript指定日期增加自然月份(有闰年2月判断)
- 苹果手机连wifi很慢-解决方案
- 如何让自己的电脑内外网同时用?
- 非形式逻辑(04)因果关系和推理
- keil startup_stm32f10x_hd.s编译报错
- Laravel验证器的使用
- 龙蜥LoongArch架构研发全揭秘,龙芯开辟龙腾计划技术合作新范式
- Visual Studio Code For Markdown Guide
- ActiveMQ 无法启动 提示端口被占用,永远无法杀掉进程
- 使用室内地图提升体育场体验的4种方式
- Linux 系统调用深思:从原理到实战