用數論的知識解決模冪運算

2022-09-18 23:42:13 字數 927 閱讀 5359

在數學上,如果數a與數b對m取模後得到的值相等,即a%m=b%m,則稱a與b是關於模m同餘,記為a≡b。

此外對於同餘運算有如下定理:(自己推導的話也可以輕易得證)

(1)若a≡b,則存在常數d,使得a+d≡b+d ;

(2)若a≡b,則存在常數d,使得a*d≡b*d  ;

(3)若a≡b,則存在常數n,使得a^n≡b^n  ;

基於此原理,對於模冪運算,即a^n%m的運算可以,通過a^n≡b^n(前提a≡b)的形式來化簡,輔以定理(1)和(2),可以實現以較短的時間進行求解。

程式如下:

1

/*****************************************===2*

3* 函 數 名:modcal4*

5* 參 數:

6* int digit:底數

7* int n :指數

8* int m :模數9*

10* 功能描述:運算數論原理解決模冪運算11*

12* 返 回 值:返回模冪運算的結果13*

14* 丟擲異常:15*

1617*18

****************************************====

*/19

20int modcal( int digit, int n, int

m )21

模冪運算功能的測試**如下:

# include using std::cin ;

using std::cout ;

using std::endl ;

int main( int argc, char **ar** )

} return 0 ;

}

數論學習筆記 快速冪 取模運算

快速冪,就是冪運算的一種快速演算法,它的時間複雜度為 在了解快速冪之前,我們需要先了解一下傳說中的二進位制。要知道,這個世界上只有10種人,一種是懂二進位制的人,另一種是不懂二進位制的人。滑稽 相對於十進位制,我們生活中所用的是十進位制,滿十進一。那麼二進位制,顧名思義,就是滿二進一。就像上上段的那...

快速冪(冪運算取模的logn演算法)

以下以求a的b次方來介紹 把b轉換成二進位制數 該二進位制數第i位的權為 例如11的二進位制是1011 11 2 1 2 0 2 1 2 1 因此,我們將a 轉化為算 對於 令a 0 a 2 0 1 a 1 a 2 1 1 a 2 a 2 2 0 a 3 a 2 3 1 可以看出a n 的前半部分是...

第31章 數論演算法 元素的冪以及模取冪

在這裡介紹求元素的冪x n x和n均為非負整數 的兩種演算法,乙個是遞迴求解,另外乙個是用反覆平方法 當我們計算x n時,當n 0,結果為1,這可以看做遞迴的基準情況,當n為偶數時,x n x 2 n 2 當n是基數時,x n x 2 n 1 2 x。如下 bool iseven unsigned ...