快速冪演算法

2021-10-12 06:37:19 字數 1174 閱讀 2472

先來一道洛谷水題

這題並不難理解,但是要做出來要理解一種演算法:快速冪

舉個例子:計算2的81次方。如果要一次一次的遞增運算,要計算81次,快速冪演算法能夠大大減少要運算的次數:

2^81 = 2 ^ 80 * 2

= 2 ^ (40 *2) 2

=4 ^ 40 * 2

=4 ^ (220) *2

=16 ^ 20 * 2

=16 ^ (2 *10) *2

=256 ^ 10 * 2

= 256^(2 * 5 ) *2

= 65536 ^ 5 *2

= 65536 ^4 * 65536 * 2

= 65536 ^(2 * 2) * 65536 * 2

= 65536 ^2 * 65536^2 *65536 *2

大概就是這麼個思想,演算法的複雜度大概是log2 n

上面題目的**如下

// an highlighted block

#include

intksm

(long

long

int value,

long

long

int pow,

long

long

int mod)

else

}return value* result % mod;

}int

main()

因為在計算機中位運算和與運算比除運算和取餘運算更快,所以可以進一步壓榨效能,得到最優解

// an highlighted block

#include

intksm

(long

long

int value,

long

long

int pow,

long

long

int mod)

else

}return value* result % mod;

}int

main()

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

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

快速冪演算法

在 上一直沒有找到有關於快速冪演算法的乙個詳細的描述和解釋,這裡,我給出快速冪演算法的完整解釋,用的是c 語言,不同語言的讀者只好換個位啦,畢竟讀 c的人較多 所謂的快速冪,實際上是快速冪取模的縮寫,簡單的說,就是快速的求乙個冪式的模 餘 在程式設計過程中,經常要去求一些大數對於某個數的餘數,為了得...

快速冪演算法

模運算 公式 a b mod n a mod n b mod n mod n a b mod n a mod n b mod n mod n a b mod n a mod n b mod n mod n 要保證n是整數 要知道a mod n和b mod n都是比n小的 利用這些共識可以有效地防止溢...