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

@@ -8,6 +8,7 @@
| ChudnovskyAlgorithm | 楚德诺夫斯基算法 | [chudnovsky-algorithm](https://hatter.ink/static/resource/muboard/?id=chudnovsky-algorithm&version=latest&full=1) | | ChudnovskyAlgorithm | 楚德诺夫斯基算法 | [chudnovsky-algorithm](https://hatter.ink/static/resource/muboard/?id=chudnovsky-algorithm&version=latest&full=1) |
| EulerNumber | 欧拉数 | [eulers-number](https://hatter.ink/static/resource/muboard/?id=eulers-number&version=latest&full=1) | | EulerNumber | 欧拉数 | [eulers-number](https://hatter.ink/static/resource/muboard/?id=eulers-number&version=latest&full=1) |
| EulerTheorem | 欧拉定理 | [euler-theorem](https://hatter.ink/static/resource/muboard/?id=euler-theorem&version=latest&full=1) | | EulerTheorem | 欧拉定理 | [euler-theorem](https://hatter.ink/static/resource/muboard/?id=euler-theorem&version=latest&full=1) |
| FibonacciSequence | 斐波那契数列 | [fibonacci-sequence](https://hatter.ink/static/resource/muboard/?id=fibonacci-sequence&version=latest&full=1) |
| LeibnizFormula | $\pi$ 的莱布尼茨公式 | [leibniz-formula](https://hatter.ink/static/resource/muboard/?id=leibniz-formula&version=1) | | LeibnizFormula | $\pi$ 的莱布尼茨公式 | [leibniz-formula](https://hatter.ink/static/resource/muboard/?id=leibniz-formula&version=1) |
| ModularInv | 求乘法逆元【扩展欧几里得法】 | - | | ModularInv | 求乘法逆元【扩展欧几里得法】 | - |
| Prime | 试除法 | - | | Prime | 试除法 | - |

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();
}
}