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项的最大公约数是多少? 输入输出格式 输入格式: 两个正整 ...
随机推荐
- 微信小程序-01-项目组成文件介绍(入门篇)
自古开篇先说两句,写这些笔记不是学习用的,主要是后续分享一些遇到的坑,碰到过什么样的问题,怎么去解决,如果你不是一个很耐心无看文章的人,建议去 网易云课堂找一些课程,跟着别人的脚步或许会更有动力,我的 ...
- Retrofit2 动态(静态)添加请求头Header
Retrofit提供了两个两种定义HTTP请求头字段的方法即静态和动态.静态头不能改变为不同的请求,头的键和值是固定的且不可改变的,随着程序的打开便已固定. 动态添加 @GET("/&quo ...
- (后端)Java中关于金额大小写的工具类
/** * 金额小数转换成中文大写金额 * * @author Neil Han * */ private static final String UNIT[] = { "万", ...
- SolrCloud集群搭建(基于zookeeper)
1. 环境准备 1.1 三台Linux机器,x64系统 1.2 jdk1.8 1.3 Solr5.5 2. 安装zookeeper集群 2.1 分别在三台机器上创建目录 mkdir /usr/hdp/ ...
- late_initcall和module_init的区别
在init.h中有如下定义: 详情参照:linux 设备驱动加载的先后顺序 #define pure_initcall(fn) __define_initcall("0",fn,1 ...
- UITableViewCell 获取当前位置
CGRect rectInTableView = [tableView rectForRowAtIndexPath:indexPath]; CGRect rectInSuperview = [tabl ...
- Vue、Vuex+Cookie 实现自动登陆 。
概述 1.自动登陆实现思路. 2.vuex + cookie 多标签页状态保持. 自动登陆的需求: 1.登陆时勾选自动登陆,退出登陆或登陆到期后再次登陆后自动填写表单(记住密码)或访问登陆页自动登陆. ...
- Window 由于未经处理的异常,进程终止。
今天遇到了一个程序停止的问题: 应用程序: BussinessService.exe Framework 版本: v4.0.30319 说明: 由于未经处理的异常,进程终止.异常信息: System. ...
- 【19】Linux系统知识点
一.积跬步以致千里,积怠情以致深渊 二.目录结构
- SSM搭建一个后台管理系统
看一下效果图: 登陆界面: 图片上传页面: 我也把项目放到服务器上了,可以直接查看项目内容: http://codingcoge.cn/ssm-demo/login.html 1 我也放到github ...