快速冪 陣列按位運算解決高精度冪運算

2021-10-19 02:15:13 字數 544 閱讀 9884

求ab %c的值

(假設ans=ab)

其中a,b,c為整數,且a>0,c<109,b<1018

對於這個問題,我們首先想到的是暴力演算法,for迴圈迴圈b次,最後對c取模,但這樣做會有兩個缺陷

第一:時間複雜度為o(b),如果b很大,那麼計算機需要很長時間計算

第二:即便是long long型資料,a^b也很容易超過long long 的最大值

那麼應該如何優化呢?

首先有這樣有乙個性質:

(ab)%p=[(a%p)(b%p)]%p

(可設a=k1p+q1,b=k2p+q2來證明)

通過取模運算的這個性質,我們可以每乘一次a,就對其取模,以此可以解決資料爆掉的問題

但是時間複雜度依然是o(b)

如何繼續優化?

我們考慮手動計算3^10的過程

我們是310=95=9*812

即:當指數b為偶數時,我們直接將指數除以2,然後將底數a平方

當指數b為奇數時,我們

快速冪 高精度求冪

本文講述快速冪的原理,以及用法 定義 快速求,取base為底數的exp次冪,即求 baseexp 時間複雜度 o log n 思想 每一步都把指數分成兩半,而相應的底數做平方運算。不僅能把非常大的指數給不斷變小,所需要執行的迴圈次數也變小,而最後表示的結果卻一直不會變。原理 a b m a m b ...

麥森數 高精度 快速冪

快速冪模板 求a b int ans 1 while b 0 printf d n ans 高精度乘高精度模板 void cheng int a,int b c 0 a 0 b 0 for int i 0 i10 while c k 0 c 0 如下 include include includeu...

位運算以及快速冪

1.原始碼,補碼,反碼 原始碼 原來的那個 反碼 正數的反碼是它本身,負數的反碼為 除了符號位之外,其他位取反。補碼 正數的補碼不變,負數的補碼 反碼 1 2.位運算 邏輯運算 and 只有兩個都為1,結果為1。xor 1xor1 0 0zor0 0 1xor0 1 0xor1 1 or 0or0 ...