洛谷P1306 斐波那契公约数
P1306 斐波那契公约数
题目描述
对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少?
输入输出格式
输入格式:
两个正整数n和m。(n,m<=10^9)
注意:数据很大
输出格式:
Fn和Fm的最大公约数。
由于看了大数字就头晕,所以只要输出最后的8位数字就可以了。
输入输出样例
4 7
1
说明
用递归&递推会超时
用通项公式也会超时
/*首先,斐波那契数列相邻项的gcd=1。假设不为1的话,可以推出之前所有相邻项gcd均不为1,但gcd(f(1),f(2))=gcd(1,1)=1,矛盾,所以相邻项gcd=1。然后,不妨设n<m,设第f(n)与f(n+1)为a,b,则有:x f(x)0 0 1 1 2 1 3 2 ... (n)a,(n+1)b(n+2)a+b(n+3)a+2b(n+4)2a+3b...(m)f(m-n-1)a+f(m-n)b根据gcd(m,n)=gcd(n,m%n),则gcd(f(m),f(n))=gcd(f(n),f(m)%f(n))=gcd(a,f(m-n)b)因为a和b是相邻项,gcd=1,所以_原式_=gcd(f(n),f(m-n))递归带入,得到_原式_=gcd(f(n),f(m%n))这就是gcd辗转相除的形式,所以可以得到gcd(f(m),f(n))=f(gcd(m,n))问题解决只需要先用O(logn)时间求gcd(m,n),再求f(gcd(m,n)) */ #include<iostream> #include<cstdio> using namespace std; long long n,m,a[1000000]; int gcd(int x,int y){if(y==0)return x;else return gcd(y,x%y); } int main(){scanf("%d%d",&n,&m);int p=gcd(n,m);a[1]=1;a[2]=1;for(int i=3;i<=p;i++)a[i]=(a[i-1]+a[i-2])%100000000;printf("%d",a[p]);return 0; }
转载于:https://www.cnblogs.com/thmyl/p/7467855.html
洛谷P1306 斐波那契公约数相关推荐
- 洛谷 P1306 斐波那契公约数
题意简述 求斐波那契数列第n项和第m项的最大公约数 题解思路 设斐波那契数列第x项为F[x] 则有结论\(Gcd(F[n], F[m]) = F[Gcd(n, m)]\) ============== ...
- 洛谷——P2626 斐波那契数列(升级版)矩阵
题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数). 题目描述 ...
- 洛谷P1962 斐波那契数列题解
题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数) 题目描述 请 ...
- 洛谷 P3404 斐波那契(线段树)
传送门 首先肯定是线段树,然后问题就是怎么打标记. 观察题目,可以发现,修改操作其实就是给一段区间加上从1到r-l+1的斐波那契数列. 那么思路就是:预处理斐波那契数列前缀和,这样可以O(1)查询斐波 ...
- 洛谷P1962 斐波那契数列
传送门 不难得到状态转移矩阵 然后带进去乱搞 1 //minamoto 2 #include<iostream> 3 #include<cstdio> 4 #include&l ...
- 4.21每日一题之终于结束的起点(洛谷c++)|斐波那契数列
- 斐波那契公约数的相关证明
\(\text{来一波斐波那契公约数的证明}QwQ\) \(\text{已知} \{F_n\} \text{为斐波那契数列,求证:}\) \[\forall\ n,m\in\text{Z}^{+},( ...
- 【小组专题三:斐波那契专题】斐波那契 与其20个性质 | 泽肯朵夫表示 | 卢卡斯数 与其8个性质 | 常系数二次线性齐次序列 | 模板与例题
斐波那契专题 斐波那契序列的定义 斐波那契序列的基本性质 卢卡斯数 卢卡斯数的基本性质 正整数的泽肯朵夫(Zeckendorf)表示 其他斐波那契的性质 常系数的二次线性齐次递归关系 斐波那契进制/斐 ...
- 烦神的斐波那契洛谷-1306-斐波那契公约数
传送门 洛谷1306传送门 -------------------------------------------------------------------------------------- ...
- 斐波那契数列升级版(洛谷P2626题题解,C++语言描述)
题目要求 题目链接 分析 首先是求斐波那契数列,这东西我就不说了,能看到这篇题解的你肯定会. 为什么要用数组呢?为了记忆化,防止重复算. 当然,由于本题是单查询,所以不必记忆化,但记忆化对多查询真的会 ...
最新文章
- [20161107]关于数据文件位图区.txt
- Git清除本地账号密码/保存账号密码
- python爬虫去哪儿网_大型爬虫案例:爬取去哪儿网
- 对象的多态(核心、困难、重点)
- 栈和队列之仅用递归函数和栈操作逆序一个栈
- Sublime删除所有包含特定值的行
- 02.1-元素定位(find)
- org.springframework.data.redis.serializer.SerializationException: Cannot serialize;
- Redis 发布订阅,小功能大用处,真没那么废材!
- oppo面经-java开发
- 用inno 打包程序 学习之路(转载)
- 传感器原理及工程应用第4版
- iOS 微信授权登录
- mkv无损转换成mp4,方法步骤
- qps tps rps 区别
- 直流侧电力有源滤波器滤除谐波干扰的原理及方案
- 3年试点即将到期,电子印章将成网络货运新动力
- 9.7 方向导数与梯度
- antd 嵌套表格 没有子项隐藏图标
- react利用react-activation实现子路由缓存