【题解】斐波那契数列最大公约数
【问题描述】
斐波那契数列满足 F1 = F2 = 1,从 F3 开始有 Fn = Fn-1 + Fn-2。请你计算
GCD(F2020, F520),其中 GCD(A, B) 表示 A 和 B 的最大公约数。
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
解题思路
求出两个斐波那契数
用求得的数做最大公约数计算。
可以利用递归求出斐波那契和最大公约数,由于花费时间过长,不使用。
使用BigInteger存取,用long则会溢出。求最大公约数可以使用欧几里得算法,BigInteger里已经封装此方法(gcd)。
记得学习BigInteger其他方法。
【扩展】
用递归求斐波那契
/**
* @param n : Fib的第几项
*/
static int Fibonacci(int n) {
if (n == 2 || n == 1) {
return 1;//递归出口
}
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
用递归求最大公约数
// 利用辗转相除法和递归计算最大公约数
static int GCD(int n, int m) {
if (n % m == 0) {
return m;//递归出口
}
return GCD(m, n % m);//辗转相除法
}
【代码】
import java.math.BigInteger;
/**
* 题目: 斐波那契最大公约数
*/
public class topic05 {
public static void main(String[] args) {
BigInteger Fib2020 = Fibonacii(2020);
BigInteger Fib520 = Fibonacii(520);
// 使用BigInteger提供的gcd方法求得最大公约数
System.out.println(Fib2020.gcd(Fib520));
}
/**
* @param n : Fib的第几项
*/
static BigInteger Fibonacii(int n) {
BigInteger first = BigInteger.ONE; // 基本常量1
BigInteger second = BigInteger.ONE;
BigInteger temp = null; // 记录前两项的和
if (n <= 2) return first;// 前两项都是1
for (int i = 3; i <= n; i++) {
// 新的项是前两项相加
temp = first.add(second);
// 后移
first = second;
second = temp;
}
return temp;
}
结果
6765
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?