Java 求n个斐波那契数,其中n可以变化到10^9
//我试图找到(n^n)%100000007,其中n是级数的第n个斐波那契项。 示例:n=3和4(2^2)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
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中执行操作并返回最终字符串。