feat: add fibonacci sequence
This commit is contained in:
35
src/main/java/me/hatter/math/FibonacciSequence.java
Normal file
35
src/main/java/me/hatter/math/FibonacciSequence.java
Normal 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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user