我有一個矩陣[2,2] [1,0]。我需要這個2 * 2矩陣的第n個複數。當我使用簡單的乘法時,我可以在O( n)或O(logn)。 O(LOGN)代碼:N次方矩陣乘法.Better方法
int NUM(int n)
{
int F[2][2] = {{2,2},{1,0}};
if(n == 0)
return 0;
power(F, n-1);
return F[0][0];
}
/* Optimized version of power() */
void power(int F[2][2], int n)
{
if(n == 0 || n == 1)
return;
int M[2][2] = {{2,2},{1,0}};
power(F, n/2);
multiply(F, F);
if(n%2 != 0)
multiply(F, M);
}
它與n.But的小值相當優良,一旦如果n是10^9或more.int的順序,長整型甚至更長的長整型將無法正常工作所以,我相信這種方法似乎並不是很有幫助。
基本上我的問題是:數字變得非常大,甚至不會長時間的進入int.Then我怎麼處理它。
任何人都可以建議我任何公式或算法來獲得2 * 2矩陣[2,2] [1,0]的n次冪時,n是10^9?
謝謝
請說清楚,您是否遇到性能問題(太慢)或溢出問題(數字變得太大,結果變得不正確)?我認爲後者,在這種情況下,這不是算法的錯誤,你需要使用一些bignum庫。 – Thomas 2012-07-06 19:54:18
數字變得相當大,甚至在很長的時間內都不會來。我沒有時間複雜性的問題。 – vijay 2012-07-06 19:56:25
您是否需要一個確切的值,或者只需要模數值很大的值? – templatetypedef 2012-07-06 19:58:28