洛谷 P1306 斐波那契公约数 解题报告
P1306 斐波那契公约数
题意:求\(Fibonacci\)数列第\(n\)项和第\(m\)项的最大公约数的最后8位。
数据范围:\(1<=n,m<=10^9\)
一些很有趣的性质
引理1:\(F_{(a,b)}=(F_a,F_b)\)
在证明引理1之前,我们得先证明引理2和引理3
引理2:\(F_{m+n}=F_m*F_{n+1}+F_{m-1}*F_n=F_{m+1}*F_n+F_m*F_{n-1}\)
证明:
设正整数\(a>b\)
\(F_a\)
\(=F_{a-1}+F_{a-2}\)
\(=2*F_{a-2}+F_3\)
\(=3*F_{a-3}+2*F_{a-4}\)
\(=F_4*F_{a-3}+F_3*F_{a-4}\)
\(=...\)
\(=F_b*F_{a-b+1}+F_{b-1}*F_{a-b}\)
引理3:\((F_n,F_{n+1})=1\)
证明:
\((F_{n+1},F_n)\)
\(=(F_{n+1}-f_n,F_n)\)
\(=(F_{n-1},F_n)\)
\(=...\)
\(=(F_4,F_3)\)
\(=1\)
证明引理1:
对于\(F_{(a,b)}=(F_a,F_b)\)
右边
\(=(F_b*F_{a-b+1}+F_{b-1}*F_{a-b},F_b)\)
\(=(F_{b-1}*F_{a-b},F_b)\)
\(=(F_{a-b},F_b)\)
即相当于坐标版的gcd了
最后等于\((F_{(a-b)},F_0)\)
直接上矩阵快速幂一顿操作就行了
Code:
#include <cstdio>
#include <cstring>
#define ll long long
const ll mod=100000000;
ll m,n;
ll gcd(ll a,ll b)
{
return b?gcd(b,a%b):a;
}
struct matrix
{
ll dx[3][3];
matrix()
{
memset(dx,0,sizeof(dx));
}
matrix friend operator *(matrix n1,matrix n2)
{
matrix n3;
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
for(int k=1;k<=2;k++)
n3.dx[i][j]=(n3.dx[i][j]+n1.dx[i][k]*n2.dx[k][j])%mod;
return n3;
}
}base,s;
matrix quick_pow(matrix d,ll k)
{
matrix f;
f.dx[1][1]=f.dx[2][2]=1;
while(k)
{
if(k&1)
f=f*d;
d=d*d;
k>>=1;
}
return f;
}
int main()
{
scanf("%lld%lld",&n,&m);
ll k=gcd(n,m);
base.dx[1][1]=base.dx[1][2]=base.dx[2][1]=s.dx[1][1]=s.dx[1][2]=1;
printf("%lld\n",quick_pow(base,k-1).dx[1][1]);
return 0;
}
2018.7.8
洛谷 P1306 斐波那契公约数 解题报告的更多相关文章
- 洛谷 P1306 斐波那契公约数
洛谷 P1306 斐波那契公约数 题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? ...
- 洛谷——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位 ...
- 洛谷P1306 斐波那契公约数
题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? 输入输出格式 输入格式: 两个正整 ...
- 洛谷 P1306 斐波那契公约数 题解
题面 结论:gcd(F[n],F[m])=F[gcd(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 F[n ...
- 「洛谷P1306」斐波那契公约数 解题报告
P1306 斐波那契公约数 题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很"简单"问题:第n项和第m项的最大公 ...
- 洛谷P1962 斐波那契数列【矩阵运算】
洛谷P1962 斐波那契数列[矩阵运算] 题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) ( ...
- 洛谷P3938 斐波那契
题目戳 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家斐波那契提出的模型来进行 繁衍:一对兔子从出生后第二个月起,每个月刚开始的时候都会产下一对小兔子 ...
- P1306 斐波那契公约数
题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? 输入输出格式 输入格式: 两个正整 ...
随机推荐
- 用EXCEL批量更改文件名,一个命令就能完成
工作任务:学籍库里需要更新和完善学生信息,其中有一项工作就是要导入以身份证号为文件名的学生照片,而目前各个班级提交的学生照片是以学生姓名命名的.如何将学生姓名批量转换成身份证号码呢? 解决方案:用EX ...
- 团队博客作业Week2 --- 学长学姐访谈录
## 团队作业2 ## ### 团队一 ### 这个团队中组员是位研一的学姐,她的软件工程老师是姚淑珍,当时她们团队总共有4个人,而且她们都很努力,但是可能是最后团队的作品不太理想,她们的软件并没有上 ...
- OO第三阶段作业总结
调研: 最早的程序设计是直接采用机器语言来编写的,或者使用二进制码来表示机器能够识别和执行的指令和数据.机器语言的优点在于速度快,缺点在于写起来实在是太困难了,编程效率低,可读性差,并且 ...
- 用java进行简单的万年历编写
import java.util.Scanner; public class PrintCalendarDemo1 { public static void main(String[] args) { ...
- java 面试 -- 4
Java面试知识点总结 本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺(阅读本文需要有 ...
- javascript修改div大小遮挡页面渲染问题
页面中引入了其他js文件,浏览器窗口改变,页面没有跟随渲染问题.最后找到原因是因为这个js方法少了最后一行: "right": RightBox_w. window.onresiz ...
- Alpha版本冲刺(五)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- Gradle入门(2):构建简介
基本概念 在Gradle中,有两个基本概念:项目和任务.请看以下详解: 项目是指我们的构建产物(比如Jar包)或实施产物(将应用程序部署到生产环境).一个项目包含一个或多个任务. 任务是指不可分的最小 ...
- angularJS1笔记-(19)-angular异步加载包的方式
我们平时写的导入包的方式都是同步方式,有时候会显得过于卡顿,这样我们就可以使用异步加载的方式. script.js方式: 执行结果为: 异步加载还可以加载多个即为script([,,,],functi ...
- 西门子S7系列PLC的主要种类及应用软件
德国西门子(SIEMENS)公司生产的可编程序控制器在我国的应用也相当广泛,在冶金.化工.印刷生产线等领域都有应用.西门子(SIEMENS)公司的PLC产品包括LOGO,S7-200,S7-300,S ...