这道题其实是真的数学巨佬才撸的出来的题目了 但如果只知道结论但是不知道推导过程的我感觉证明无望 首先这道题肯定不能直接搞,而且题目明确说明了一些方法的问题 所以就暗示我们直接上矩阵了啦 但是如果直接搞还要高精度,不仅很烦而且绝壁TLE 所以我们引出性质,其中f[x]表示斐波那契数列的第x项: gcd(f[n],f[m])=f[gcd(n,m)] 具体的超详细的证明戳这里 然后题意相当于对f[gcd(n,m)]取膜1e9,就是最基本的矩阵优化了 关于矩阵优化斐波那契的板子题看这里 关于这题的COD…
题目链接:https://www.luogu.org/problemnew/show/P1306#sub gcd(f[m],f[n]) = f[gcd(m,n)] #include <iostream> #include <algorithm> #include <cstdio> using namespace std; ; long long n, m; long gcd(long long x, long long y) { ) return y; else ret…
洛谷 P1306 斐波那契公约数 题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? Update:加入了一组数据. 输入输出格式 输入格式: 两个正整数n和m.(n,m<=10^9) 注意:数据很大 输出格式: Fn和Fm的最大公约数. 由于看了大数字就头晕,所以只要输出最后的8位数字就可以了. 输入输出样例 输入样例#1:  4 7 输出样例#1:  1 说明 用递归&递推会…
P1306 斐波那契公约数 题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? 输入输出格式 输入格式: 两个正整数n和m.(n,m<=10^9) 注意:数据很大 输出格式: Fn和Fm的最大公约数. 由于看了大数字就头晕,所以只要输出最后的8位数字就可以了. 输入输出样例 输入样例#1: 4 7 输出样例#1: 1 说明 用递归&递推会超时 用通项公式也会超时 矩阵乘法优化斐波…
P1306 斐波那契公约数:https://www.luogu.org/problemnew/show/P1306 这道题目就是求第n项和第m项的斐波那契数字,然后让这两个数求GCD,输出答案的后8位: 思路: 1/gcd(F[n],F[m])=F[gcd(n,m)].所以先求出gcd(n,m),然后构造斐波那契数列的矩阵快速幂. #include <algorithm> #include <iterator> #include <iostream> #include…
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…
原题链接 嗯...很多人应该是冲着这个标题来的 (斐波那契的魅力) 1.分析题面 点开题目,浏览一遍题目,嗯?这么简单?还是蓝题? 再看看数据范围,感受出题人深深的好意... \(n,m \leq 10^9\) 就算加上矩阵快速幂,\(fib[1000000000]\) 也不是高精度能存的下的. 所以,我们得想一点技巧. 2.寻找思路 深呼吸,思考学过的斐波那契数列的性质...(???) ...... 终于,它出现了! \(gcd(fib[x],fib[y])=fib[gcd(x,y)]\) 怎…
题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? 输入输出格式 输入格式: 两个正整数n和m.(n,m<=10^9) 注意:数据很大 输出格式: Fn和Fm的最大公约数. 由于看了大数字就头晕,所以只要输出最后的8位数字就可以了. 输入输出样例 输入样例#1: 4 7 输出样例#1: 1 说明 用递归&递推会超时 用通项公式也会超时 Solution: 本题其实并不难,开始被题…
I. Interesting Integers 传送门 应该是叫思维题吧,反正敲一下脑壳才知道自己哪里写错了.要敢于暴力. 这个题的题意就是给你一个数,让你逆推出递推的最开始的两个数(假设一开始的两个数为x和y),而且要求x<=y. 通过找规律可以发现,这个题就是求解a*x+b*y=k这个方程的x和y的值,并且要x和y为最小满足条件的解.可以找规律出一个公式fi[i]*x+(fi[i-1]+fi[i])*y=n.因为不知道n具体是在第几步推出来的,所以for循环跑一遍预处理出来的斐波那契数列(存…
题目分析: 对于给出的n,求出斐波那契数列第n项的最后4为数,当n很大的时候,普通的递推会超时,这里介绍用矩阵快速幂解决当递推次数很大时的结果,这里矩阵已经给出,直接计算即可 #include<iostream> #include<stdio.h> using namespace std; ; struct mat{ ][]; }; mat operator * (mat a, mat b){ //重载乘号,同时将数据mod10000 mat ret; ; i < ; i++…