斐波那契数列最大公约数
解析
题目分析:
1. 计算斐波那契数列,f(2020) 和 f(520) 用long必越界,故使用BIgInteger
2. 因为求最大公约数的两个数相差太大,故使用欧几里得算法求最大公约数。 若使用更相减损术 则内存溢出。
3. 计算最大公约数是也要使用BigInteger,直接返回结果
答案:
6765
package java_2020_B;
import java.math.BigInteger;
public class Main005_斐波那契数列最大公约数 {
public static BigInteger f(int t) {
BigInteger a = BigInteger.ONE;
BigInteger b = BigInteger.ONE;
BigInteger c = BigInteger.ZERO;
for (int i = 3; i <= t; i++) {
c = a.add(b);
a = b;
b = c;
}
return c;
}
public static BigInteger gcd(BigInteger a, BigInteger b){
if(b.compareTo(BigInteger.ZERO)==0){
return a;
}else{
return gcd(b,a.mod(b));
}
}
public static void main(String[] args) {
System.out.println(f(2020));
System.out.println(f(520));
BigInteger n = gcd(f(2020),f(520));
System.out.println(n);
}
}