C 演算法篇 快速冪

2021-10-09 21:39:56 字數 684 閱讀 6446

讓我們先來思考乙個問題:7的10次方,怎樣算比較快?

方法1:最樸素的想法,7*7=49,49*7=343,... 一步一步算,共進行了9次乘法。

這樣算無疑太慢了,尤其對計算機的cpu而言,每次運算只乘上乙個個位數,無疑太屈才了。這時我們想到,也許可以拆分問題。

方法2:先算7的5次方,即7*7*7*7*7,再算它的平方,共進行了5次乘法。

但這並不是最優解,因為對於「7的5次方」,我們仍然可以拆分問題。

方法3:先算7*7得49,則7的5次方為49*49*7,再算它的平方,共進行了4次乘法。

模仿這樣的過程,我們得到乙個在 o(logn) 時間內計算出冪的演算法,也就是快速冪。

輸入:三個不超過 10000 的正整數 x,p,m。

輸出:x^p mod m的值。

#includeusing namespace std;

int x, p, m, i, result;

int main()

cout << result << endl;

return 0;

}

水篇快速冪

一,快速冪 取冪指數的二進位制,從低到高尋找,當前位 1時,加上當前位對應的值,複雜度順利降到o logn b 1000001101 二進位制 a b a 0 a 2 a 3 a 9 o log2 b typedef long long ll ll qpow ll a,ll b a b return...

C 演算法之 快速冪

快速冪 quick power,以下簡稱qpw 是math.h或cmath裡的內建函式pow的公升級版 只不過是比pow快了一些 qpw函式需要實現以下的條件 宣告ans變數,賦值為1 如果指數為奇數,ans乘上原數 原數 原數的平方,指數除以2 如果b 0,返回ans,否則重複執行2,3步 注意取...

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

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