非波那契转化为矩阵乘
来源:互联网 发布:天刀高冷女神捏脸数据 编辑:程序博客网 时间:2024/05/17 03:50
/*
*将非波那契数列转化为矩阵相乘,再利用类似二分的方法进行对矩阵相乘进行降幂
*/
#include<iostream>
#include<cstdio>
#define yu 7
using namespace std;
int maxri[2][2];
int tmp[2][2];
int a,b,n;
void pow(int sum){
if(sum == 1){
maxri[0][0] = a % yu;
maxri[0][1] = b % yu;
maxri[1][0] = 1;
maxri[1][1] = 0;
}
else if(sum == 2){
maxri[0][0] = (a*a+b) % yu;
maxri[0][1] = (a*b)% yu;
maxri[1][0] = a % yu;
maxri[1][1] = b % yu;
}
else {
pow(sum >> 1);//二分递归
tmp[0][0] = (maxri[0][0]*maxri[0][0]+maxri[0][1]*maxri[1][0]) % yu;
tmp[0][1] = (maxri[0][0]*maxri[0][1]+maxri[0][1]*maxri[1][1]) % yu;
tmp[1][0] = (maxri[1][0]*maxri[0][0]+maxri[1][1]*maxri[1][0]) % yu;
tmp[1][1] = (maxri[1][0]*maxri[0][1]+maxri[1][1]*maxri[1][1]) % yu;
if(sum & 1){//注意奇数的处理
maxri[0][0] = (tmp[0][0]*a+tmp[0][1]) % yu;
maxri[0][1] = (tmp[0][0]*b) % yu;
maxri[1][0] = (tmp[1][0]*a+tmp[1][1]) % yu;
maxri[1][1] = (tmp[1][0]*b) % yu;
}
else{
maxri[0][0] = tmp[0][0] % yu;
maxri[0][1] = tmp[0][1] % yu;
maxri[1][0] = tmp[1][0] % yu;
maxri[1][1] = tmp[1][1] % yu;
}
}
}
int main(){
while(scanf("%d%d%d",&a,&b,&n) != EOF){
if(a==0 && b==0 && n== 0) break;
if(n < 3){
printf("1\n");
}
else {
pow(n-2);
printf("%d\n",(maxri[0][0]+maxri[0][1])%yu);
}
}
return 0;
}
//hdu还有一道类似这样的题,请待述
- 非波那契转化为矩阵乘
- 矩阵链乘+斐波那契+快速幂 专题
- HDU 3936 斐波那契性质矩阵连乘
- hdu3117(斐波那契数列,矩阵连乘)
- hdu1588(斐波那契,矩阵连乘)
- HDU 3117(数论,斐波那契+矩阵连乘)
- HDU 1588 斐波那契数列数列变形和矩阵连乘
- 寂寞的素数 斐波那契数列性质+矩阵连乘+欧拉定理 经典啊
- ,快速乘,快速幂,矩阵快速幂(求斐波那契数列)
- 斐波那契矩阵
- 斐波那契矩阵
- 非波那契数列
- vector转化为Mat矩阵
- 【类型转化】托管转化为非托管
- 矩阵加速递推(XDU 斐波那契数列为列)
- 矩阵快速幂(以斐波那契数列为例)
- 矩阵连乘问题的非动态解法
- 矩阵连乘(动态规划非递归)
- 使用HttpClient的时候容易忽略的细节
- Lock线程锁
- PreparedStatement 与 Statement 的区别
- asp.net数据绑定表达式
- 有种快乐的代价叫拖延
- 非波那契转化为矩阵乘
- MyEcplise8.5,8.6,9.0 修改servlet,jsp等模板
- 关于EGL
- cocos3d 与box2d的联合使用
- 金融市场的广度、深度与弹性
- ARM中C和汇编混合编程及示例
- 教练不一定教你的开车技术,请珍藏
- 看了一个博客觉得不错
- Android--UI事件监听器及其处理程序