P1306 斐波那契公约数
题目描述
对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少?
输入输出格式
输入格式:
两个正整数n和m。(n,m<=10^9)
注意:数据很大
输出格式:
Fn和Fm的最大公约数。
由于看了大数字就头晕,所以只要输出最后的8位数字就可以了。
输入输出样例
4 7
1
说明
用递归&递推会超时
用通项公式也会超时
Solution:
本题其实并不难,开始被题意吓到了,结果后面写出了式子都没看出来(手动滑稽~)。
方法:结论+矩阵加速
结论:$$gcd(F[n],F[m])=F[gcd(n,m)]$$
证明:
我们设$n<m$,$F[n]=a$和$F[n+1]=b$。
则$F[n+2]=a+b,F[n+3]=a+2b,…F[m]=F[m-n-1]a+F[m-n]b$
$\because \quad$ $F[n]=a,F[n+1]=b,F[m]=F[m-n-1]a+F[m-n]b$
$\therefore \quad$ $F[m]=F[m-n-1]*F[n]+F[m-n]*F[n+1]$
又$\because \quad$ $gcd(F[n],F[m])=gcd(F[n],F[m-n-1]*F[n]+F[m-n]*F[n+1])$
而$F[n]|F[m-n-1]*F[n]$
$\therefore \quad gcd(F[n],F[m])=gcd(F[n],F[m-n]*F[n+1])$
引理:$gcd(F[n],F[n+1])=1$
证:由欧几里德定理知
$gcd(F[n],F[n+1])=gcd(F[n],F[n+1]-F[n])$
$=gcd(F[n],F[n-1])$
$=gcd(F[n-2],F[n-1])$
$……$
$=gcd(F[1],F[2])=1$
$\therefore \quad gcd(F[n],F[n+1])=1$
由引理知:
$F[n],F[n+1]$互质
而 $gcd(F[n],F[m])=gcd(F[n],F[m-n]*F[n+1])$
$\therefore \quad$ $gcd(F[n],F[m])=gcd(F[n],F[m-n])$
即$gcd(F[n],F[m])=gcd(F[n],F[m\;mod\;n])$
继续递归,将$m1=m\;mod\;n$,则$gcd(F[n],F[m])=gcd(F[n\;mod\;m1],F[m1])$
$…$
不难发现,整个递归过程其实就是在求解$gcd(n,m)$
最后递归到出现$F[0]$时,此时的$F[n]$就是所求gcd。
$$\therefore \quad gcd(F[n],F[m])=F[gcd(n,m)]$$
于是本题就转为求$gcd(n,m)$,然后求斐波拉契数列的$F[gcd(n,m)]$项后8位(即对100000000取模)。
至于矩阵的构造:
初始矩阵 \begin{bmatrix} F[2]=1 & F[1]=1\end{bmatrix} 以及中间矩阵 \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}
代码:
#include<bits/stdc++.h>
#define il inline
#define ll long long
#define mem(p) memset(&p,0,sizeof(p))
using namespace std;
const ll mod=1e8;
ll n,m;
struct mat{ll a[][],r,c;};
il mat mul(mat x,mat y)
{
mat p;
mem(p);
for(int i=;i<x.r;i++)
for(int j=;j<y.c;j++)
for(int k=;k<x.c;k++)
p.a[i][j]=(p.a[i][j]+x.a[i][k]*y.a[k][j])%mod;
p.r=x.r,p.c=y.c;
return p;
}
il void fast(ll k)
{
mat p,ans;
mem(p),mem(ans);
p.r=p.c=;
p.a[][]=p.a[][]=p.a[][]=;
ans.r=,ans.c=;
ans.a[][]=ans.a[][]=;
while(k)
{
if(k&)ans=mul(ans,p);
p=mul(p,p);
k>>=;
}
cout<<ans.a[][];
}
il ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
int main()
{
ios::sync_with_stdio();
cin>>n>>m;
n=gcd(n,m);
if(n<=)cout<<;
else fast(n-);
return ;
}
P1306 斐波那契公约数的更多相关文章
- 洛谷 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项的最大公约数是多少? 输入输 ...
- 洛谷- P1306 斐波那契公约数 - 矩阵快速幂 斐波那契性质
P1306 斐波那契公约数:https://www.luogu.org/problemnew/show/P1306 这道题目就是求第n项和第m项的斐波那契数字,然后让这两个数求GCD,输出答案的后8位 ...
- Luogu P1306 斐波那契公约数
这道题其实是真的数学巨佬才撸的出来的题目了 但如果只知道结论但是不知道推导过程的我感觉证明无望 首先这道题肯定不能直接搞,而且题目明确说明了一些方法的问题 所以就暗示我们直接上矩阵了啦 但是如果直接搞 ...
- 【Luogu】P1306 斐波那契公约数 题解
原题链接 嗯...很多人应该是冲着这个标题来的 (斐波那契的魅力) 1.分析题面 点开题目,浏览一遍题目,嗯?这么简单?还是蓝题? 再看看数据范围,感受出题人深深的好意... \(n,m \leq 1 ...
- 洛谷P1306 斐波那契公约数
题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? 输入输出格式 输入格式: 两个正整 ...
- 【luogu P1306 斐波那契公约数】 题解
题目链接:https://www.luogu.org/problemnew/show/P1306#sub gcd(f[m],f[n]) = f[gcd(m,n)] #include <iostr ...
- P1306 斐波那契公约数(ksm+结论)
题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? Update:加入了一组数据. 输 ...
随机推荐
- Luogu2046 NOI2010 海拔 平面图、最小割、最短路
传送门 首先一个不知道怎么证的结论:任意点的\(H\)只会是\(0\)或\(1\) 那么可以发现原题的本质就是一个最小割,左上角为\(S\),右下角为\(T\),被割开的两个部分就是\(H=0\)与\ ...
- CF875F Royal Questions 基环树、Kruskal
题目传送门:http://codeforces.com/problemset/problem/875/F 题意:有$N$个王子和$M$个公主,每个公主或王子都只能选择至多一个王子或公主作为自己的结婚对 ...
- python3 编程使用技巧
from random import randint data = {"Student{}".format(i):randint(60,100) for i in range(1, ...
- webpack 构建 node_modules 中公司内部组件
构建 node_modules 中特定的组件 { test:/\.js$/, exclude: /node_modules\/(?!(zt-)\/).*/, use:[ { loader:" ...
- 2019 The 19th Zhejiang University Programming Contest
感想: 今天三个人的状态比昨天计院校赛的状态要好很多,然而三个人都慢热体质导致签到题wa了很多发.最后虽然跟大家题数一样(6题),然而输在罚时. 只能说,水题还是刷得少,看到签到都没灵感实在不应该. ...
- linux的convert图片处理工具
得到一个图片的尺寸, identify test.png 结果为: test.png PNG 178x15 178x15+0+0 16-bit PseudoClass 65536c 2.28kb 使用 ...
- 【下一代核心技术DevOps】:(六)Rancher集中存储及相关应用
1. 前言 为什么要使用集中存储? 使用集中存储有个很大的优势是数据安全和统一管理,和集群完美配合. 产品集成存储经历过几个阶段: 1.单机本机存储. 系统使用本地硬盘存储 2.单网络集中存储. 局域 ...
- Ionic 入门与实战之第一章:Ionic 介绍与相关学习资源
原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第一章,主要对 Ionic 的概念.发展历程.适配的移动平台等知识进行了介绍,并分享了 Ionic 相关的学习资源. 原文发表于我的技 ...
- Openstack架构概念图-简单汇总
OpenStack是一个云平台管理的项目,它不是一个软件.这个项目由几个主要的组件组合起来完成一些具体的工作.想要了解openstack,第一步我们可以观察他的概念图: 针对上图的翻译+解释: 上图主 ...
- BugPhobia启程篇章:需求分析与功能定位
0x01 :引言 If you weeped for the missing sunset, you would miss all the shining stars 我看着大巴缓缓的驶过街角,我躲在 ...