初學演算法之快速冪

2022-02-04 04:28:10 字數 1442 閱讀 3878

目前遇到需要用快速冪的題,大多都是與取模有關且直接乘會爆資料的題。

因此,在講快速冪之前,我們得先了解下取模運算。

基本性質

若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;

}

1

long

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 }

view code

1

//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 }

view code

具體的這個部落格寫的挺不錯:

這個是一位大佬對快速冪的推導思路:

演算法手記之快速冪

快速冪是一種快速求出 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 ...