簡單快速冪

2021-07-25 04:50:27 字數 1152 閱讀 4492

對於求乙個數a的n次冪,我們第一想法就是呼叫包含在標頭檔案cmath或math.h標頭檔案下的pow(a, n)函式, 為了演算法看起來簡單用int代替大數模版。

最簡單的實現就是用乙個迴圈和乙個變數,不斷用變數乘上底數,當然,這樣做的效率並不高o(n)。

#include

using

namespace

std;

int pow1(int a, int b)

int main()

求 3^5:

3^5 = 3^2 * 3^2 * 3.

同理 3^4:

3^4 = 3^2 * 3^2.

這樣就根據奇數冪和偶數冪來分成了兩半,故得到了兩個公式:

x^n = x^(n/2) * x^(n/2). (n為偶數)

x^n = x^(n/2) * x^(n/2) * x. (n為奇數)

通過遞迴來實現:

#include

using

namespace

std;

int pow2(int a, int b)

int main()

//ps:b & 1表示了b的奇偶性,奇數返回1,偶數返回0;相當於b % 2 == 1;

對於求5^999,可以用二分思想處理,還有就是用經典快速冪:

5^999 = 5^512 * 5^256 * 5^128 * 5^64 * 5^32 * 5^4 * 3.

把5^999的指數分解為底數為2的n次冪,512 = 2^9, 256 = 2^8……;

然後把999轉換成2進製為111110011111

1110

0111

2^92^8

2^72^6

2^50

02^2

2^12^0

#include

using

namespace

std;

int pow3(int x, int n)

} int result = x;

n >>= 1;

while(n)

return result;

}int main()

簡單快速冪

本篇文章將介紹關於快速冪的知識,將會對後面的學習有所幫助。p1226傳送門 如何讓計算機計算出 a b bmod p 第一種演算法 樸實無華的 o n 演算法 long long qpow int a,int b,int p return ans 當然,以上解法肯定正確,但當 b geq 10 8 ...

簡單的快速冪

題目大意 輸入b,p,k的值,求b p mod k的值。其中b,p,k k為長整型數。輸入輸出格式 輸入格式 三個整數b,p,k.輸出格式 輸出 b p mod k s s為運算結果 例如 輸入樣例 1 2 10 9 輸出樣例 1 2 10 mod 9 7 輸入樣例 2 4523 59 7762 輸...

快速冪的簡單解釋

快速冪演算法,顧名思義就是求冪時速度很快 廢話 看了很多部落格裡的解釋,都說得很玄奧 其實快速冪很容易解釋的。比如求3的20次冪,一般我們會用迴圈乘法來求,也就是需要迴圈20次。但是再想想,3 20 9 10,這樣只需要迴圈10次了。繼續,9 10 81 5。這裡似乎進行不下去了,其實還可以繼續,8...