高效冪演算法

2021-07-03 07:58:53 字數 694 閱讀 7234

《資料結構與演算法分析》mark.allen.weiss中提供的分治演算法

(美) mark allen weiss

計算乙個整數的冪 xn   的常見演算法是使用 n-1 次乘法自乘。然而我們可以找到更好的演算法。可以應用這樣一種遞

歸演算法:

如果 n 是偶數,有xn=xn/2 * x n/2  , 如果 n 是奇數,則有 xn =x (n-1)/2 * x (n-1)/2 * x 。

為了說明這個演算法為什麼更高效,我們舉乙個例子。例如計算 x62    ,用第一種的常見演算法我們要做61次自乘。而

用第二種演算法只要做9次乘法:

x3=(x2)x  ,  x7=(x3)2x  ,  x15=(x7)2x  ,  x31=(x15)2x  ,  x62=(x31)2

因為求 x3

x7x15

x31 各做了兩次乘法,最後求 x62 又做了一次乘法,總共就是9次。

long pow_s(int x, int n)//x的n次方

if (n == 1)

if (n % 2 == 0)

else

}

九度OJ 1474 矩陣冪(高效演算法)

題目1474 矩陣冪 時間限制 1 秒 記憶體限制 128 兆 特殊判題 否 提交 2864 解決 1112 題目描述 給定乙個n n的矩陣,求該矩陣的k次冪,即p k。輸入 輸入包含多組測試資料。資料的第一行為乙個整數t 0 輸出 對於每組測試資料,輸出其結果。格式為 n行n列個整數,每行數之間用...

高效進行模冪運算

你的任務是計算 a b 對 1337 取模,a 是乙個正整數,b 是乙個非常大的正整數且會以陣列形式給出。示例 1 輸入 a 2,b 3 輸出 8示例 2 輸入 a 2,b 1 0 輸出 1024 單就這道題可以有三個難點 那麼對於這幾個問題,我們分開思考,逐個擊破。如何處理陣列指數 看到這,我們的...

演算法提高快速冪(快速冪演算法詳解)

問題描述 給定a,b,p,求 a b mod p。輸入格式 輸入共一行。第一行有三個數,n,m,p。輸出格式 輸出共一行,表示所求。樣例輸入 2 5 3 樣例輸出 資料規模和約定 共10組資料 對100 的資料,a,b為long long範圍內的非負整數,p為int內的非負整數。所謂的快速冪,實際上...