洛谷—— P1962 斐波那契数列
https://www.luogu.org/problem/show?pid=1962
题目背景
大家都知道,斐波那契数列是满足如下性质的一个数列:
• f(1) = 1
• f(2) = 1
• f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数)
题目描述
请你求出 f(n) mod 1000000007 的值。
输入输出格式
输入格式:
·第 1 行:一个整数 n
输出格式:
第 1 行: f(n) mod 1000000007 的值
输入输出样例
5
5
10
55
说明
对于 60% 的数据: n ≤ 92
对于 100% 的数据: n在long long(INT64)范围内。
矩阵乘法优化。、
#include <cstdio> #define LL long long
const LL mod(); inline void read(LL &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
} LL n,m;
struct Matrix_fb {
LL e[][];
void init_base()
{
e[][]=;
e[][]=;
e[][]=;
e[][]=;
}
void init_ans()
{
e[][]=e[][]=;
}
Matrix_fb operator * (Matrix_fb x) const
{
Matrix_fb tmp;
for(int i=; i<; ++i)
for(int j=; j<; ++j)
{
tmp.e[i][j]=;
for(int k=; k<; ++k)
tmp.e[i][j]+=e[i][k]*x.e[k][j],tmp.e[i][j]%=mod;
}
return tmp;
}
}ans,base; int AC()
{
// freopen("spfa.in","r",stdin);
// freopen("spfa.out","w",stdout);
read(n);
if(n==||n==) { puts(""); return ; }
ans.init_ans(); base.init_base();
for( n-=; n; n>>=,base=base*base)
if(n&) ans=ans*base;
printf("%lld\n",ans.e[][]);
return ;
} int Aptal=AC();
int main(){;}
单位矩阵 在第一行
#include <cstdio> #define LL long long
const LL mod(); inline void read(LL &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
} LL n,m;
struct Matrix_fb {
LL e[][];
void init_base()
{
e[][]=;
e[][]=;
e[][]=;
e[][]=;
}
void init_ans()
{
e[][]=e[][]=;
}
Matrix_fb operator * (Matrix_fb x) const
{
Matrix_fb tmp;
for(int i=; i<; ++i)
for(int j=; j<; ++j)
{
tmp.e[i][j]=;
for(int k=; k<; ++k)
tmp.e[i][j]+=e[i][k]*x.e[k][j],tmp.e[i][j]%=mod;
}
return tmp;
}
}ans,base; LL GCD(LL a,LL b)
{
return !b ? a : GCD(b,a%b);
} int AC()
{
// freopen("spfa.in","r",stdin);
// freopen("spfa.out","w",stdout);gcd-=2
read(n);
if(n==||n==) { puts(""); return ; }
ans.init_ans(); base.init_base();
for( ; n; n>>=,base=base*base)
if(n&) ans=ans*base;
printf("%lld\n",ans.e[][]);
return ;
} int Aptal=AC();
int main(){;}
单位矩阵,在对角线
洛谷—— P1962 斐波那契数列的更多相关文章
- 洛谷P1962 斐波那契数列【矩阵运算】
洛谷P1962 斐波那契数列[矩阵运算] 题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) ( ...
- 洛谷P1962 斐波那契数列 || P1349 广义斐波那契数列[矩阵乘法]
P1962 斐波那契数列 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数 ...
- 洛谷——P1962 斐波那契数列
P1962 斐波那契数列 题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 ...
- 洛谷P1962 斐波那契数列(矩阵快速幂)
题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数) 题目描述 请 ...
- 洛谷P1962 斐波那契数列题解
题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数) 题目描述 请 ...
- 【洛谷P1962 斐波那契数列】矩阵快速幂+数学推导
来提供两个正确的做法: 斐波那契数列双倍项的做法(附加证明) 矩阵快速幂 一.双倍项做法 在偶然之中,在百度中翻到了有关于斐波那契数列的词条(传送门),那么我们可以发现一个这个规律$ \frac{F_ ...
- 洛谷 P1962 斐波那契数列
题目链接:https://www.luogu.org/problemnew/show/P1962 题目大意: 略 分析: 由于数据规模很大,需要用矩阵快速幂来解. 代码如下: #pragma GCC ...
- 题解——洛谷P1962 斐波那契数列(矩阵乘法)
矩阵乘法加速线性递推的典型 大概套路就是先构造一个矩阵\( F \)使得另一初始矩阵\( A \)乘以\( F^{x} \)能够得出第n项 跑的飞快 虽然我也不知道那个矩阵要怎么构造 或许就像我使用了 ...
- 洛谷P1962 斐波那契数列
传送门 不难得到状态转移矩阵 然后带进去乱搞 //minamoto #include<iostream> #include<cstdio> #include<cstrin ...
随机推荐
- FFT模板——copied from hzwer
/* Welcome Hacking Wish You High Rating */ #include<iostream> #include<cstdio> #include& ...
- Oracle 字符拼接
使用的是ORACLE中的cast函数: 官方链接: https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions023.htm#SQ ...
- jdbc 接口学习笔记
一.JDBC概念 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它由一组用Jav ...
- [转]深入javascript——构造函数和原型对象
对象,是javascript中非常重要的一个梗,是否能透彻的理解它直接关系到你对整个javascript体系的基础理解,说白了,javascript就是一群对象在搅..(哔!). 常用的几种对象创建模 ...
- 努比亚 Z17s (Nubia NX595J) 解锁BootLoader 并刷入recovery ROOT
首先下载好工具链接:https://pan.baidu.com/s/1nw7BoZB 密码:zuun 备用下载链接:https://pan.baidu.com/s/1c3mUQGg 本篇教程教你如何傻 ...
- 编码的来历和使用 utf-8 和GB2312比较
经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, wordpress程序是用的UTF-8,很多cms用的是GB2312. ● 为什么有这么多编码? ...
- mui图片懒加载
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...
- 【Oracle】RedHat 6.5 安装 11gR2数据库
1. 挂载操作系统光盘 [root@drz ~]# mount /dev/cdrom /mnt mount: block device /dev/sr0 is write-protected, mou ...
- oracle 提示登录密码过期解决
1.登录到oracle的 服务器 2.切换到oracle 用户 3.设置到当前操作的实例名:export ORACLE_SID=XXX 4.连接数据库的命令行模式:sqlplus /nolog 5.s ...
- Deutsch lernen (06)
1. das Verzeichnis,-se 表格:名单,目录 Die Daten sind in einem Verzeichnis enthalten. (包括,含有) 2. enthalten ...