[英]Trying to compute Pisano Period For Fibonacci no modulo m where m is a number
[英]Fibonacci n modulo m
我正在嘗試計算modul模𝑚,其中𝑛可能真的很大:最多10 ^ 18,𝐹𝑛是第n個斐波那契數這是我的代碼,它適用於小數,但對於大數,它會拋出OutOfMemoryError或NegativeArraySizeException 。
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));
}
}
這是您的兩個例外/錯誤的解釋。
long[] arr = new long[(int) n + 1];
)。 閱讀: 基本數據類型 。 (基本上,您在某個時候溢出,結果整數為負數) 如果n
可以是10 ^ 18 ,那么即使您不使用數組,它也仍然會超時,因為您將運行一個循環直到n
(即10 ^ 18 )來計算第n個斐波那契數。
您可以使用矩陣求冪方法(線性遞歸方法)。 您可以在此博客中找到詳細的說明和過程。 運行時間為O(log n)
。
希望這可以幫助!!!
您的代碼有兩個問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.