洛谷 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项的最大公约数是多少? 输入输出格式 输入格式: 两个正整 ...
随机推荐
- WEB渗透测试基础工具
代理查询网站:hidemyass(隐藏我的屁股) HTTrack:HTTrack是一个免费和易用的离线浏览工具(浏览器),它可以允许你下载整个WWW网站至本地目录,并且通过遍历网站目录获取HTML,图 ...
- Netty源码分析第2章(NioEventLoop)---->第4节: NioEventLoop线程的启动
Netty源码分析第二章: NioEventLoop 第四节: NioEventLoop线程的启动 之前的小节我们学习了NioEventLoop的创建以及线程分配器的初始化, 那么NioEvent ...
- 剑指 Offer——连续子数组的最大和
1. 题目 2. 解答 初始化 sum=0,然后遍历数组进行累加.如果 sum 变为负数,也就说再继续累加的话贡献为负,我们需要更新 sum=0,重新开始累加. 初始化 max_sum 为数组的第一个 ...
- go 运行项目
此时运行项目,不能像之前简单的使用go run main.go,因为包main包含main.go和router.go的文件,因此需要运行go run *.go命令编译运行.如果是最终编译二进制项目,则 ...
- Array.Copy 数据是克隆吗?
偶然看到 Array.Copy 方法的时候,想到,它是否是克隆,又是否是深克隆. 做了一个测试 public class abc { public string hello; } [TestMetho ...
- python常用模块目录
博客目录总纲首页 python其他知识目录 random hashlib os sys json __name__ shutil xlrd xlwt xlutils 核心模块:os s ...
- Tomcat ngxin 反向代理
tomcat nginx 反向代理 安装nginx yum直接安装 yum install nginx –y 也可以编译安装 这是用编译安装,新手可以用yum安装 配置文件在 /etc/nginx/c ...
- 转载---VisualStudioCode通过SSH远程编辑文件
最近需要长期修改远端服务器上的代码,调试.vim操作又不是很6,想到了远程操作的办法,找到一篇好用的bolg,记录一下. 原文链接:https://blog.csdn.net/qq_38401919/ ...
- Mongodb For Mac OSX && 登录验证
题外话:尽管有不少人贴出了 <我不用mongodb的十大理由> 等系列文章,但是 NoSQL 的发展不会因此而止步, mongodb 是 NoSQL 的典型代表,楼主还是抱乐观态度的,有人 ...
- (第十一周)Beta—review阶段成员贡献分
项目名:食物链教学工具 组名:奋斗吧兄弟 组长:黄兴 组员:李俞寰.杜桥.栾骄阳.王东涵 个人贡献分=基础分+表现分 基础分=5*5*0.5/5=2.5 成员得分如下: 成员 基础分 表现分 个人贡献 ...