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项的最大公约数是多少? 输入输出格式 输入格式: 两个正整 ...
随机推荐
- java设计模式学习
每次面试都需要看设计模式,每次都很好的理解了,但是实际开发中没有应用总是忘记.现在把它汇总一下. 二十三种设计模式 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模 ...
- 洗礼灵魂,修炼python(32)--面向对象编程(2)—进一步认识类
上一篇文章已经看到了如何定义类,但是我想你应该有很多疑惑的吧?最好的学习方法就是不断思考,不断问为什么,不断和已有知识做类比,从中获得理解.那么这一篇博文就是从解惑答疑中进一步认识类. 解惑答疑 我按 ...
- 第五章 绘图基础(LINEDEMO)
LINEDEMO程序绘制一个矩形.两条直线.一个椭圆和一个圆角矩形.该程序表明,定义了封闭矩形的这些函数确实对这些区域进行了填充,因为椭圆后面的线被隐藏了. /*------------------- ...
- Hibernate 中的 idclass mapping 问题
关于出现 idclass mapping 运行错误 @IdClass 注释通常用于定义包含复合键id的Class.即多个属性的关键复合. @IdClass(CountrylanguageEntityP ...
- 解决关于phpstorm打开速度很慢的问题
我的电脑是GTX950M , 8G 内存的 ,配置不算低但是打开phpstorm的速度非常的慢.基本上每次打开都要花一分钟以上,虽然打开sublime text3 只需要三四秒,但是phpstorm功 ...
- asp.net core 中使用StyleCop.StyleCopAnalyzers
1.nuget中安装 StyleCop.Analyzers 当前版本1.1.0-beta004 2.在项目根目录新增 stylecop.json文件 { "settings": { ...
- Spring容器技术内幕之内部工作机制
引言 Spring容器就像一台构造精妙的机器,我们通过配置文件向机器传达控制信息,机器就能够按照设定的模式工作.如果将Spring容器比作一辆车,那么可以将BeanFactory看成汽车的发动机,而A ...
- python第四十六课——函数重写
3.函数重写(override) 前提:必须有继承性 原因: 父类中的功能(函数),子类需要用,但是父类中函数的函数体内容和我现在要执行的逻辑还不相符 那么可以将函数名保留(功能还是此功能),但是将函 ...
- 2017-2018-2 20155314《网络对抗技术》Exp1 PC平台逆向破解(5)M
2017-2018-2 20155314<网络对抗技术>Exp1 PC平台逆向破解(5)M 目录 实验要求 实验内容 预备知识 实验步骤 0 准备工作:macOS下Parallels De ...
- go标准库的学习-mime
参考:https://studygolang.com/pkgdoc 导入方法: import "mime" mime实现了MIME的部分规定. 什么是MIME: MIME(Mult ...