正整數冪餘數(II)
更新日期: 2014年8月31日
程式可以計算一個整數的正整數冪的餘數 (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
註: 如果是使用fx-50FH,上述程式中紅色的乘號 ×可以省略不輸入,程式長度可節省1 byte。
第二個程式 (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 返回正常計算模式。