Java 求n个斐波那契数,其中n可以变化到10^9

Java 求n个斐波那契数,其中n可以变化到10^9,java,fibonacci,biginteger,Java,Fibonacci,Biginteger,//我试图找到(n^n)%100000007,其中n是级数的第n个斐波那契项。 示例:n=3和4(2^2) public class Sol\u Big{ 公共静态void main(字符串参数[]) { int n=10000000; BigInteger a=BigInteger.0; BigInteger b=BigInteger.1; BigInteger c=BigInteger.valueOf(1); biginger MOD=biginger.valueOf(100000007

//我试图找到(n^n)%100000007,其中n是级数的第n个斐波那契项。 示例:n=3和4(2^2)

public class Sol\u Big{
公共静态void main(字符串参数[])
{  
int n=10000000;
BigInteger a=BigInteger.0;
BigInteger b=BigInteger.1;
BigInteger c=BigInteger.valueOf(1);
biginger MOD=biginger.valueOf(100000007);

对于(int j=2;j而言,诀窍在于可以使用矩阵乘法计算斐波那契数:

| 0 1 |   | a |   | b     |
| 1 1 | * | b | = | a + b |
有了这些知识,我们可以计算第n个斐波那契数:

| 0 1 |^n   | 0 |
| 1 1 |   * | 1 |
因为矩阵乘法是结合的,所以我们可以有效地计算m^n

  • 如果
    n
    是偶数,
    m^n=m^(n/2)*m^(n/2)
  • 如果
    n
    是奇数,
    m^n=m^((n-1)/2))*m^((n-1)/2))*m
请注意,我们需要相同的东西两次,但只需计算一次。
这使得计算
O(logn)
中的第n个斐波那契数成为可能


我让您自己编写代码。

诀窍在于,您可以使用矩阵乘法计算斐波那契数:

| 0 1 |   | a |   | b     |
| 1 1 | * | b | = | a + b |
有了这些知识,我们可以计算第n个斐波那契数:

| 0 1 |^n   | 0 |
| 1 1 |   * | 1 |
因为矩阵乘法是结合的,所以我们可以有效地计算m^n

  • 如果
    n
    是偶数,
    m^n=m^(n/2)*m^(n/2)
  • 如果
    n
    是奇数,
    m^n=m^((n-1)/2))*m^((n-1)/2))*m
请注意,我们需要相同的东西两次,但只需计算一次。
这使得计算
O(logn)
中的第n个斐波那契数成为可能


我让您来编写代码。

最好使用stringbuffer来实现此目的。在sr=tring buffer中执行操作并返回最终字符串。使用stringbuffer来实现此目的最好。在sr=tring buffer中执行操作并返回最终字符串。