目前遇到需要用快速冪的題,大多都是與取模有關且直接乘會爆資料的題。
因此,在講快速冪之前,我們得先了解下取模運算。
基本性質
若p|(a-b),則a≡b (% p)。例如 11 ≡ 4 (% 7), 18 ≡ 4(% 7)
(a % p)=(b % p)意味a≡b (% p)
對稱性:a≡b (% p)等價於b≡a (% p)
傳遞性:若a≡b (% p)且b≡c (% p) ,則a≡c (% p)
模運算與基本四則運算有些相似,但是除法例外。其規則如下:
(a + b) % p = (a % p + b % p) % p (1)
(a - b) % p = (a % p - b % p) % p (2)
(a * b) % p = (a % p * b % p) % p (3)
a ^ b % p = ((a % p)^b) % p (4)
((a*b) % p * c)% p = (a * (b*c) % p) % p (6)
(a * b) % p = (b * a) % p (8)
紅字部分是快速冪經常會用到的,快速冪用到的思想很多部落格中都有解釋,這裡就大致總結下**。
int pmod(int a) //快速冪
return
ans;
}
1view codelong
long mmod(long
long a,long
long b,long
long c) //
快速乘法211
return
res;12}
13long
long pmod(long
long a,long
long b,long
long
c)14
23return
ans;
24 }
1view code//poj 3070 斐波那契數列
2 #include3 #include4 #include 5
using
namespace
std;
6const
int mod = 10000;7
struct
nod8
a,ans;
11int
n;12
nod mul(nod a,nod b)
1324}25
return
t;2627}
28void qm(int
n)2939}
40int
main()
4149 }
具體的這個部落格寫的挺不錯:
這個是一位大佬對快速冪的推導思路:
演算法手記之快速冪
快速冪是一種快速求出 ab 的值的演算法,複雜度為o logn 而一般的樸素演算法是由乙個for迴圈慢慢算,算完需要o n 的時間,這顯然不符合yxh老師高山流水般的思路,所以我們需要乙個高效的演算法來解決這個問題。快速冪的原理 假設要求211的值,指數11可以使用二進位制的形式寫成11 20 21...
C 演算法之 快速冪
快速冪 quick power,以下簡稱qpw 是math.h或cmath裡的內建函式pow的公升級版 只不過是比pow快了一些 qpw函式需要實現以下的條件 宣告ans變數,賦值為1 如果指數為奇數,ans乘上原數 原數 原數的平方,指數除以2 如果b 0,返回ans,否則重複執行2,3步 注意取...
初學 快速冪 的理解
部落格停了差不多三個月,雖然這一段時間在學演算法,但從來沒有寫部落格。今天看了一上午的快速冪,突然想寫寫部落格,增加一下自己的記憶!這個博文知識簡單介紹一下演算法中取餘的原因 1至於快速冪的概念不詳細記錄了。當我們想求a的b次冪對c取余時,我們會直接想到用這個演算法 int ans 1 for i ...