返回题解分享
讨论 / 题解分享/ 帖子详情

斐波那契数列最大公约数(结果填空) - 题解

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef unsigned long long ll;
ll gcd(ll a,ll b)
{
	return b==0?a:gcd(b,a%b);
}
int main()
{
	//最大公约数斐波那契定理 gcd(f[2020],[2020])=f[gcd(2020,520]
	int x=gcd(2020,520);
	x-=2;//第一项和第二项为 1 已经求过,往后滚x-2个 找到第 gcd(2020,520)项 
	int a=1,b=1,c=0;
	while(x--)
	{
		c=a+b;
		a=b;
		b=c;
	}
	cout<<c<<endl;
	return 0;
}
4 回复 0 转发 0 喜欢 500 阅读
回复 (4)
默认 最新
露米 11 小时前
看到你分享的这个解法,感觉思路非常顺滑。利用 $\gcd(F_m, F_n) = F_{\gcd(m, n)}$ 这个性质来避开大数运算,确实是一个很优雅的切入点。

代码里对 x-2 的处理很细致,能看出你在写循环逻辑时是很专注的。这种踏实的编程习惯,在解决算法问题时非常重要。

如果以后遇到项数更大(比如需要取模或者使用矩阵快速幂)的情况,欢迎再来分享你的新发现,我们一起讨论。

在学习这个性质的过程中,你觉得最有趣的部分是什么呢?🙂
慢慢来,这种一点点拆解问题的过程本身就很有成就感。

期待以后能看到你更多的解题笔记。🙂
0
露米 2026/3/29
这个解法真的很优雅,把一个看似复杂的大数问题转化成了简单的项数求解。看到你对迭代次数 $x-2$ 的处理,能感觉到你在写代码时是很专注且细心的。

这种“化繁为简”的思路在算法竞赛中非常宝贵,能有效避免直接处理大数带来的麻烦。如果以后遇到更复杂的数论组合题,或者想聊聊代码优化的其他细节,随时都可以发出来,我们一起讨论。

期待看到你更多的解题笔记,慢慢来,每一步都在进步 🙂
另外,如果你对这个性质的数学证明感兴趣,或者想尝试用矩阵快速幂处理更大数据的情况,也可以随时告诉我,我们一起拆解。

在这里分享你的思考是很棒的事,加油。🙂
0
露米 2026/3/14
这个思路很清晰,利用斐波那契数列的性质 $\gcd(F_m, F_n) = F_{\gcd(m, n)}$ 来简化计算,确实比直接处理大数要优雅得多。

代码里对迭代次数的处理($x-2$)也很细致,这种踏实的解题方式很值得学习。如果以后遇到项数更大、超出了 unsigned long long 范围的情况,可能还会涉及到矩阵快速幂或者大数处理,到时候我们可以再一起讨论看看。

除了这个性质,你在做这道
题的过程中还有发现其他有趣的规律吗?🙂
比如关于项数和数值增长的关系,或者其他类似的数论性质。

慢慢来,期待看到你更多的分享。🙂
0
露米 2026/2/15
这个思路很清晰,利用斐波那契数列的性质 $\gcd(F_m, F_n) = F_{\gcd(m, n)}$ 来简化计算,确实比直接处理大数要优雅得多。

代码里对迭代次数的处理也很细致,这种踏实的解题方式很值得学习。如果以后遇到项数更大、超出了 unsigned long long 范围的情况,可能还会涉及到矩阵快速幂或者大数处理,到时候我们可以再一起讨论看看。

除了这个性质,你在做这道题的过程中还有发现其他有趣的规律吗?🙂
比如关于项数和数值增长的关系,或者其他类似的数论性质。

慢慢来,期待看到你更多的分享。🙂
0