k進製快速冪

2022-04-12 01:46:32 字數 940 閱讀 4253

通常快速求a^b (常常還會要求取模,這樣的話只要邊乘邊模即可)時,我們一般將指數b轉換成二進位制,然後從低位到高位「掃瞄」,並維護乙個代表該位權值的伴隨變數。根據該位是否為1來決定是否給維護的答案變數乘上該位的權值。只要掃瞄log2 n位,掃瞄每位時只做常數次以內的運算(伴隨變數、答案變數的更新,指數字的移動),故複雜度為log2 b。

1

#define ll long long

2ll pow( ll a,ll b,ll mod )311

return

ans;

12 }

二進位制快速冪函式

但是當b特別大(如b<=10^1000000)時,要存下b就要用字串/高精度,難以從二進位制的角度直接處理b。要麼用高精度進製轉換(n^2複雜度警告,n為轉換結果數的位數),要麼頭鐵做k(視實際情況。這裡以10進製讀入,就取k=10)進製快速冪

在k進製下不進行進製轉換,直接從指數b的低位開始掃瞄做快速冪。維護答案變數和代表該位權值的伴隨變數,該位為幾,就給答案變數乘幾次伴隨變數。

1

//預設k為比較小的數。

2#define ll long long

3char c[ 1000007 ];//

字串存大整數,這裡存的是指數,順序儲存(c[0]存最高位)

4 ll kthpow( ll a,ll t,ll mod,ll k )//

t為指數的位數 518

return

ans;

19 }

時間複雜度為 k*logk b 一般來說k不會很大。如果遇到k也很大的情況,可以在上文注釋標記**處的for迴圈改為綴套的快速冪,複雜度log2 k(總不會k也不能被longlong存下吧。能被存綴套的快速冪就用普通二進位制的就行了唄,方便寫**)  log k  b

十進位制快速冪演算法

NOIP模擬 K進製(進製轉換 快速冪)

給定乙個k 2 k 16 進製數a,判斷a是否能被k 1整除。第一行是乙個整數t 1 t 50 表示測試點數量。對於每組資料,第一行乙個整數k,表示進製。第二行乙個k進製數,表示a。保證a是合法的k進製數,沒有前導0,且只由 0 9 a f 構成。如果a可以被k 1整除,輸出 yes 否則輸出 no...

二進位制快速冪及矩陣快速冪

二進位制快速冪 二進位制快速冪雖然不難寫,但是無奈總是會忘,所以還是在這裡把板子寫一下。二進位制快速冪很好理解 假設我們要求a b,那麼其實b是可以拆成二進位制的,該二進位制數第i位的權為2 i 1 例如當b 11時,11的二進位制是1011,11 2 1 2 0 2 1 2 1,因此,我們將a 轉...

十進位制快速冪

題目 題意 矩陣f滿足以下遞推式 輸入八個整數n,m,a,b,c,d,e,f,輸出f n m 2012182013的值。分析 本題需要構造矩陣,那麼首先我們根據遞推式 可以構造 可以看出,我們還需要求f n 2 和f n 1 的值。那麼繼續,根據 我們先利用上面的式子消去下面式子中的f i 1 得到...