[矩阵乘法]裴波拉契数列III
[
矩
阵
乘
法
]
裴
波
拉
契
数
列
I
I
I
[矩阵乘法]裴波拉契数列III
[矩阵乘法]裴波拉契数列III
Description
求数列f[n]=f[n-1]+f[n-2]+1的第N项.f[1]=1,f[2]=1.
Input
n(1<n<231-1)
Output
一个数为裴波拉契数列的第n项mod 9973;
Sample Input
12345
Sample Output
8932
题目解析
对于为什么用矩阵乘法来做,详见博客斐波那契数列II
我们考虑矩阵
⊏
f
[
n
−
2
]
,
f
[
n
−
1
]
,
1
⊐
\sqsubset f[n - 2] , f[n - 1] , 1\sqsupset
⊏f[n−2],f[n−1],1⊐并利用斐波那契数列的递推关系来得到式子
⊏
f
[
n
]
,
f
[
n
−
1
]
,
1
⊐
=
⊏
f
[
n
−
2
]
+
f
[
n
−
1
]
+
1
,
f
[
n
−
1
]
,
1
⊐
\sqsubset f[n] , f[n - 1] , 1\sqsupset = \sqsubset f[n - 2] + f[n - 1] + 1, f[n - 1], 1\sqsupset
⊏f[n],f[n−1],1⊐=⊏f[n−2]+f[n−1]+1,f[n−1],1⊐
然后可以构造出一个
3
∗
3
3 * 3
3∗3的矩阵
T
T
T
∣
0
1
0
1
1
0
0
1
1
∣
\begin{vmatrix} 0 & 1 & 0 \\ 1 & 1 & 0 \\ 0 & 1 & 1 \\ \end{vmatrix}
∣∣∣∣∣∣010111001∣∣∣∣∣∣
然后可以通过
⊏
f
[
1
]
,
f
[
2
]
,
1
⊐
∗
T
=
⊏
f
[
2
]
,
f
[
3
]
,
1
⊐
\sqsubset f[1] , f[2] , 1\sqsupset * T = \sqsubset f[2] , f[3], 1 \sqsupset
⊏f[1],f[2],1⊐∗T=⊏f[2],f[3],1⊐来实现代码了
Code
#include <cmath>
#include <cstdio>
#include <iostream>
using namespace std;
int nt;
const int MOD = 9973;
struct matrix
{
int n, m;
int t[10][10];
}t1, t2, t3;
matrix operator *(matrix t, matrix r)
{
matrix c;
c.n = t.n, c.m = r.m;
for (int i = 1; i <= c.n; ++ i)
for (int j = 1; j <= c.m; ++ j)
c.t[i][j]=0;
for (int k = 1; k <= t.m; ++ k)
for (int i = 1; i <= t.n; ++ i)
for (int j = 1; j <= r.m; ++ j)
c.t[i][j] = (c.t[i][j] + t.t[i][k] * r.t[k][j] % MOD) % MOD;
return c;
}
void rt (int k)
{
if (k == 1)
{
t2 = t1;
return;
}
rt (k / 2);
t2 = t2 * t2;
if (k & 1) t2 = t2 * t1;
}
int main()
{
scanf ("%d", &nt);
if (nt == 1)
{
printf ("1");
return 0;
}
t3.n = 1;
t1.n = t1.m = t3.m = 3;
t1.t[1][1] = 0, t1.t[1][2] = 1, t1.t[1][3] = 0;
t1.t[2][1] = 1, t1.t[2][2] = 1, t1.t[2][3] = 0;
t1.t[3][1] = 0, t1.t[3][2] = 1, t1.t[3][3] = 1;
t3.t[1][1] = t3.t[1][2] = t3.t[1][3] = 1;
rt (nt - 1);
t3 = t3 * t2;
printf ("%d", t3.t[1][1]);
return 0;
}
[矩阵乘法]裴波拉契数列III的更多相关文章
- [矩阵乘法]裴波拉契数列II
[ 矩 阵 乘 法 ] 裴 波 拉 契 数 列 I I [矩阵乘法]裴波拉契数列II [矩阵乘法]裴波拉契数列II Description 形如 1 1 2 3 5 8 13 21 34 55 89 ...
- [矩阵乘法]斐波那契数列IV
[ 矩 阵 乘 法 ] 裴 波 拉 契 数 列 I V [矩阵乘法]裴波拉契数列IV [矩阵乘法]裴波拉契数列IV Description 求数列f[n]=f[n-2]+f[n-1]+n+1的第N项, ...
- 浅谈矩阵加速——以时间复杂度为O(log n)的算法实现裴波那契数列第n项及前n之和使用矩阵加速法的优化求法
首先请连矩阵乘法乘法都还没有了解的同学简单看一下这篇博客: https://blog.csdn.net/weixin_44049566/article/details/88945949 首先直接暴力求 ...
- 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)
对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...
- 关于斐波拉契数列(Fibonacci)
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10 ...
- 剑指offer-第二章算法之斐波拉契数列(青蛙跳台阶)
递归与循环 递归:在一个函数的内部调用这个函数. 本质:把一个问题分解为两个,或者多个小问题(多个小问题相互重叠的部分,会存在重复的计算) 优点:简洁,易于实现. 缺点:时间和空间消耗严重,如果递归调 ...
- 剑指offer三: 斐波拉契数列
斐波拉契数列是指这样一个数列: F(1)=1; F(2)=1; F(n)=F(n-1)+F(n); public class Solution { public int Fibonacci(int n ...
- e8_4输出菲波拉契数列的前10项
program fbnq;{输出菲波拉契数列的前10项} var a:..] of integer; i:integer; begin a[]:=; a[]:=; do a[i]:=a[i-]+a[i ...
- 剑指offer-面试题9.斐波拉契数列
题目一:写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列的定义如下: { n=; f(n)={ n=; { f(n-)+f(n-) n>; 斐波拉契问题很明显我们会想到用递归来解决: ...
随机推荐
- expo-cli & React Native
expo-cli https://reactnative.dev/docs/environment-setup You will only need a recent version of Node. ...
- npm & cli & node.js
npm & cli & node.js https://www.npmjs.com/ https://www.npmjs.com/settings/xgqfrms/packages h ...
- Typescript & classes & public shorthand
classes & public shorthand Also of note, the use of public on arguments to the constructor is a ...
- svg all in one
svg all in one show svg in html methods https://vecta.io/blog/best-way-to-embed-svg https://css-tric ...
- .NET微服务最佳实践 eShopOnContainers
本文翻译自微软Docs, 内嵌译者多年使用的参悟,如理解有误,请不吝赐教. 微软与社区专家合作,开发了功能齐全的云原生微服务示例应用eShopOnContainers. 该应用旨在展示使用.NET.D ...
- Java 12 新特性介绍,快来补一补
Java 12 早在 2019 年 3 月 19 日发布,它不是一个长久支持(LTS)版本.在这之前我们已经介绍过其他版本的新特性,如果需要可以点击下面的链接进行阅读. Java 11 新特性介绍 J ...
- jenkins+docker+nginx+tomcat实现vue项目部署
一.项目准备 1.新建一个vue的项目,确保能在浏览器正常访问.然后在项目的根目录下新建一个Dockerfile的文件,内容如下 FROM nginx COPY dist /usr/share/ngi ...
- IO、NIO、BIO的区别
我们首先得明白什么是同步,异步,阻塞,非阻塞,只有这几个单个概念理解清楚了,然后在组合理解起来,就相对比较容易了. IO模型主要分类: 同步(synchronous) IO和异步(asynchrono ...
- VMware 安装 CentOS7 后的简单配置
1.连网 如果能连网,跳过此步 试着ping一下百度 ping baidu.com 动态分配 IP sudo vim /etc/sysconfig/network-scripts/ifcfg-ens3 ...
- gRPC-go源码(2):ClientConn
摘要 在上一篇文章中,我们聊了聊gRPC是怎么管理一条从Client到Server的连接的. 我们聊到了gRPC拥有Resolver,用来解析地址:拥有Balancer,用来做负载均衡. 在这一篇文章 ...