我在计算模,其中的模可能非常大:高达10^18,是第n个斐波纳契数
这是我的代码,它对小数字很好,但对大数字则抛出了内存错误或负arlaysizeexception。
import java.util.*;
public class FibonacciHuge {
private static long getFibonacciHugeFast(long n, long m) {
long[] arr = new long[(int) n + 1];
arr[0] = 0;
arr[1] = 1;
for (int i = 2; i < n + 1; i++) {
arr[i] = (arr[i - 1] + arr[i - 2]) % m;
}
return arr[(int) n];
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long n = scanner.nextLong();
long m = scanner.nextLong();
System.out.println(getFibonacciHugeFast(n, m));
}
}
最佳答案
以下是对两个异常/错误的解释。
OutOfMemoryError异常:由于您试图创建的数组太大,远远超过可能的大小请参阅此问题Do Java arrays have a maximum size?
NegativeArraySizeException:由于您将一个long转换为一个整数(代码long[] arr = new long[(int) n + 1];
)。读这个:Primitive data types。(基本上你在某个点溢出了,得到的整数是一个负数)