對於求乙個數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...