feat: add fibonacci sequence

This commit is contained in:
2025-07-23 23:48:54 +08:00
parent 6695a7dd53
commit 6ed357c29d
2 changed files with 36 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
package me.hatter.math;
import me.hatter.math.util.MathUtil;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
public class FibonacciSequence {
static final BigDecimal SQRT5 = MathUtil.sqrt(BigDecimal.valueOf(5), 100);
public static void main(String[] args) {
List<BigInteger> nums = new ArrayList<>();
List<BigInteger> num2s = new ArrayList<>();
for (int i = 0; i < 20; i++) {
nums.add(fn(i));
num2s.add(fn2(i));
}
System.out.println(nums);
System.out.println(num2s);
}
public static BigInteger fn(int n) {
BigDecimal a = BigDecimal.ONE.add(SQRT5).divide(BigDecimal.valueOf(2), 100, RoundingMode.HALF_UP);
BigDecimal b = BigDecimal.ONE.subtract(SQRT5).divide(BigDecimal.valueOf(2), 100, RoundingMode.HALF_UP);
return a.pow(n).subtract(b.pow(n)).divide(SQRT5, 0, RoundingMode.HALF_UP).toBigInteger();
}
public static BigInteger fn2(int n) {
BigDecimal a = BigDecimal.ONE.add(SQRT5).divide(BigDecimal.valueOf(2), 100, RoundingMode.HALF_UP);
return a.pow(n).divide(SQRT5, 0, RoundingMode.HALF_UP).toBigInteger();
}
}