基於位運算的快速冪與取餘運算

2021-09-27 18:17:47 字數 734 閱讀 5450

附上原題

題目描述

輸入b,p,k的值,求bp mod k的值。其中b,p,k為長整型數。

輸入格式三個整數b,p,k.

輸出格式輸出「bp mod k=s」 s為運算結果

輸入輸出樣例

輸入 2 10 9

輸出 210 mod 9=7

該題需使用快速冪,以下是快速冪的方法:

乙個數,例如(15)10=(1111)2,(8421)即(23,22,21,20).

a15=a8*a4*a2*a1

接下來是位運算:

a&1用以判斷a最後一位是否為1

a>>=1 用以向右移動一位.

故當要求ab時 ,a作為底數當最後一位為1在結果上乘基數,然後temp自乘變為temp2,b右移一位,若非1則直接自乘,右移。直到b為非正數,res為最終結果。

int a,b,

res(1)

,temp;

temp=a;

while

(b) temp*

=temp;

b>>=1;

}

接下來是取餘運算的一些性質:

(a+b)modb=(amodb+bmodb)modb

(a×b)modb=((amodb)×(bmodb))modb

快速冪 取餘運算

給你三個整數 b,p,k,求 b p mod k。輸入只有一行三個整數,分別代表 b,p,k。輸出一行乙個字串b p mod k s,其中b,p,k分別為題目給定的值,s為運算結果。對於100 的資料,保證0 leq b,p leq 2 1 leq k leq 2 快速冪的模板題,沒有什麼好說的。有...

模板 快速冪 取餘運算

輸入b,p,k的值,求b p mod k的值。其中b,p,k k為長整型數。輸入輸出格式 輸入格式 三個整數b,p,k.輸出格式 輸出 b p mod k s s為運算結果 輸入輸出樣例 輸入樣例 1 2 10 9 輸出樣例 1 2 10 mod 9 7 硬來當然不是好方法。但是有乙個規律不知道各位...

取餘運算(mod,快速冪)

題目描述 輸入b,p,k的值,求bpmodk的值。其中b,p,k k為長整型數。輸入 輸入b,p,k的值。輸出 求bpmodk的值。輸入樣例 2 10 9 輸出樣例 2 10 mod 9 7 題目分析 對於任何乙個自然數b都有b 2 b 2 b 2 例如 19 2x9 1 所以,b19 b9 9 1...