Luogu P1306 斐波那契公约数
这道题其实是真的数学巨佬才撸的出来的题目了
但如果只知道结论但是不知道推导过程的我感觉证明无望
首先这道题肯定不能直接搞,而且题目明确说明了一些方法的问题
所以就暗示我们直接上矩阵了啦
但是如果直接搞还要高精度,不仅很烦而且绝壁TLE
所以我们引出性质,其中f[x]表示斐波那契数列的第x项:
gcd(f[n],f[m])=f[gcd(n,m)]
具体的超详细的证明戳这里
然后题意相当于对f[gcd(n,m)]取膜1e9,就是最基本的矩阵优化了
关于矩阵优化斐波那契的板子题看这里
关于这题的CODE,因为那天晚上在Linux机子上打的,被强制转码风了,而且Tab还是两个空格
CODE
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
const int N=3,mod=1e8;
int n,m;
struct Matrix{
int n,m;
LL a[N][N];
inline void Fb_init(void){
n=m=2; a[1][1]=0; a[1][2]=a[2][1]=a[2][2]=1;
}
inline void cri_init(void){
n=m=2; a[1][1]=a[2][2]=1; a[1][2]=a[2][1]=0;
}
};
inline Matrix mul(Matrix A,Matrix B){
Matrix C; C.n=A.n; C.m=B.m; memset(C.a,0,sizeof(C.a));
for (register int i=1;i<=C.n;++i)
for (register int j=1;j<=C.m;++j)
for (register int k=1;k<=A.m;++k)
C.a[i][j]=(C.a[i][j]+A.a[i][k]*B.a[k][j])%mod;
return C;
}
inline Matrix quick_pow(Matrix A,int p){
Matrix T; T.cri_init();
while (p){
if (p&1) T=mul(T,A);
A=mul(A,A); p>>=1;
}
return T;
}
inline int gcd(int n,int m){
return m?gcd(m,n%m):n;
}
int main(){
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
scanf("%d%d",&n,&m); n=gcd(n,m);
if (n<=2) { puts("1"); return 0; }
Matrix A; A.Fb_init();
A=quick_pow(A,n-2);
printf("%lld",(A.a[2][1]+A.a[2][2])%mod);
return 0;
}
Luogu P1306 斐波那契公约数的更多相关文章
- 【luogu P1306 斐波那契公约数】 题解
题目链接:https://www.luogu.org/problemnew/show/P1306#sub gcd(f[m],f[n]) = f[gcd(m,n)] #include <iostr ...
- 洛谷- P1306 斐波那契公约数 - 矩阵快速幂 斐波那契性质
P1306 斐波那契公约数:https://www.luogu.org/problemnew/show/P1306 这道题目就是求第n项和第m项的斐波那契数字,然后让这两个数求GCD,输出答案的后8位 ...
- 洛谷 P1306 斐波那契公约数
洛谷 P1306 斐波那契公约数 题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? ...
- 洛谷 P1306 斐波那契公约数 解题报告
P1306 斐波那契公约数 题意:求\(Fibonacci\)数列第\(n\)项和第\(m\)项的最大公约数的最后8位. 数据范围:\(1<=n,m<=10^9\) 一些很有趣的性质 引理 ...
- 洛谷——P1306 斐波那契公约数
P1306 斐波那契公约数 题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? 输入输 ...
- 【Luogu】P1306 斐波那契公约数 题解
原题链接 嗯...很多人应该是冲着这个标题来的 (斐波那契的魅力) 1.分析题面 点开题目,浏览一遍题目,嗯?这么简单?还是蓝题? 再看看数据范围,感受出题人深深的好意... \(n,m \leq 1 ...
- P1306 斐波那契公约数
题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? 输入输出格式 输入格式: 两个正整 ...
- 【Luogu】P1306斐波那契公约数(递推)
题目链接 有个定理叫gcd(f(n),f(m))=f(gcd(n,m)) 所以递推就好了. #include<cstdio> #include<cstdlib> #includ ...
- 洛谷P1306 斐波那契公约数
题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? 输入输出格式 输入格式: 两个正整 ...
随机推荐
- SoapUI SoapUI接口测试之编码设置
SoapUI接口测试之编码设置 by:授客 QQ:1033553122 问题描述: 实际测试过程中发现,SoapUI提交后的数据,在数据库中查看数据值存储,发现是乱码,如下图: 查找原因,show c ...
- loadrunner 场景设计-添加Windows Resources计数器
场景设计-添加Windows Resources计数器 by:授客 QQ:1033553122 目的 监控要测试的windows服务器的资源使用情况 步骤 1.添加视图,方法双击.拖动左侧的Windo ...
- engineecms——工程师知识管理系统,带文档协作和状态和流程
工程师们工作的平台,需要对图纸资料按工程项目名称,按工程项目阶段,按参与设计的专业等来分放. 而设计成果需要进行校审,才能算最终成果,也就是要具备状态和流程功能,这个一般网盘资源存储是做不到的. 一些 ...
- Kotlin入门(14)继承的那些事儿
上一篇文章介绍了类对成员的声明方式与使用过程,从而初步了解了类的成员及其运用.不过早在<Kotlin入门(12)类的概貌与构造>中,提到MainActivity继承自AppCompatAc ...
- scrapy系列(三)——基础spider源码解析
前面两章介绍了scrapy的安装和项目的新建,那么这一章就讲讲spider吧. scrapy有个命令是runspider, 这个命令的作用就是将一个spider当做一个python文件去执行,而不用创 ...
- drupal 2006 mysql server has gone away
在开发一个cms drupal网站时遇到了如上图的错误,几经百度谷歌,都一致说需要修改mysql的配置 max_allowed_packet参数,但是由于我买的是虚拟主机,并没有权限修改. 本来已经放 ...
- C#与Java AES 加密解密
参考文档:https://www.cnblogs.com/xbzhu/p/7064642.html 前几天对接Java接口,需要C#加密参数,Java解密.奈何网上找了一堆大同小异的加解密方法都跟Ja ...
- 关于string指针
string str("hello world"); string *pstr = &str; cout << pstr[0] << endl; c ...
- 【问题集】VS新建项目——失败——弹出“未将对象引用设置到对象的实例”
- Flume-1.8.0_部署与常用案例
该文章是基于 Hadoop2.7.6_01_部署 进行的 Flume官方文档:FlumeUserGuide 常见问题:记flume部署过程中遇到的问题以及解决方法(持续更新) 1. 前言 在一个完整的 ...