斐波那契数列最大公约数
题目描述
斐波那契数列满足 F1 = F2 = 1F1=F2=1,从 F3F3 开始有 Fn = Fn−1 +Fn−2Fn=Fn−1+Fn−2。
请你计算 GCD(F2020,F520)GCD(F2020,F520),其中 GCD(A,B)GCD(A,B) 表示 AA 和 BB 的最大公约数。
输入描述
无。
输出描述
无。
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
记录题解
package com.xiang.lanqiao;
import java.math.BigInteger;
/**
* @author snape
* @create 2022-03-29 21:05
*/
public class FibonacciSequence {
public static BigInteger fib(int n) {
BigInteger p = new BigInteger("0");
BigInteger q = new BigInteger("0");
BigInteger r = new BigInteger("1");
if (n < 2) {
return new BigInteger(String.valueOf(n));
}
for (int i = 2; i <= n; ++i) {
p = q;
q = r;
r = p.add(q);
}
return r;
}
public static void main(String[] args) {
BigInteger x = FibonacciSequence.fib(2020);
BigInteger y = FibonacciSequence.fib(520);
System.out.println(x.gcd(y));
}
}
注意
BigInteger使用到的方法
BigInteger gcd(BigInteger val) 返回大整数的最大公约数
BigInteger add(BigInteger val) 返回两个大整数的和
其中求斐波那契数列用到了动态规划
求斐波那契数列(动态规划)