正整數冪餘數(II)

程式編寫日期: 2007年9月19日

程式可以計算一個整數的正整數冪的餘數 (Xa mod b,其中X,a及b為正整數),程式較第一版能計算 更多的情況(包括負數的被除數負數的除數,第一個程式需要在BASE模式下執行,程式較簡潔。第二個程式則在 COMP 模式下執行,程式較長,計算的情況略為比第一個程式情況多,不過要特r別留意輸入的限制條件,違反限制,第二個程式有可能會出現錯誤的數值答案(第一個程式無法得出正確答案則會出現Math ERROR),亦即是第二個程式沒有防錯誤功能。

程式需要在 BASE 模式下執行,因此在選擇新程式位置後,按 3 選用BASE模式。

第一個程式 (69 bytes,使用記憶為A、B、C及M)

Dec: 1→C: ?→M: ?→A: ?→B: While A: M ÷ B × BM-:

A - A ÷ 2 × 2 => CM - CM ÷ B × B→C:

A ÷ 2→A: MM→M: WhileEnd: C + B(0>CB

 

第二個程式 (COMP模式,85 bytes,使用記憶為A、B、C及M)

1→C: ?→A: ?→M: ?→B: Fix 0: While M:

A - B Rnd( A ÷ B - . 5→A: M ÷ 2→M:

If Ans - Rnd( Ans: Then

AC => AC - B Rnd( AC ÷ B - . 5: Ans→C: . 5M-:

IfEnd: A2→A: WhileEnd: Norm 1: C

 

註1: 若果計算Xa mod b,第一個程式的限制條件為 -2147483647≦X ≦ 2147483647,0≦a ≦ 2147483647 及 - 46341<b ≦46341,若果 b > 46341或b<- 46541時,亦可以嘗試輸入計算,因為有可能可以計算出答案,若果無法計算得到答案會顯示Math ERROR。第二個程式的限制條件為 -99999 99999 99999≦X≦99999 99999 99999,0≦a≦99999 99999 99999,-3162 2776≦b≦31622776。

註2: 第一個程式當計算冪為1或0時,b值的限制變為 -2147483647≦b ≦ 2147483647

 

例題1: 計算 310 mod 9的值 (即 310 ÷ 9的餘數)

按 Prog 1 再按 3 EXE 10 EXE 9 EXE (顯示餘數為0)

若果是第一個程式,計算完結後按 MODE 1 返回正常計算模式。

 

例題2: 計算 600013 mod 45001的值 (即 600013 ÷ 45001的餘數)

按 Prog 1 再按 60001 EXE 3 EXE 45001 EXE (顯示餘數為16667)

若果是第一個程式,計算完結後按 MODE 1 返回正常計算模式。

 

例題3: 計算 (-231)300 mod 45的值 (即 (-231)300 ÷ 45的餘數)

注意: 第一個程式使用BASE模式,所以無法使用負號,輸入負數時要用減號代替負號

按 Prog 1 再按 - 231 EXE 300 EXE 45 EXE (顯示餘數為36)

若果是第一個程式,計算完結後按 MODE 1 返回正常計算模式。

 

返回 CASIO fx-50F PLUS 程式集

Free Web Hosting