剰余
Prologで作る数学の世界―Prologそして集合‐位相‐群の第4章の問題。余りを求めろ。
abs(A, B) :- A > 0 -> B is A ; B is -A. % 条件は % A = B * Q + R, 0 <= R < abs(B) % 割る数の絶対値よりも余りが小さい res_q(A = B*Q + R) :- abs(B, B1), Q1 is A // B, (B1 > A - B*Q1,A - B*Q1 >= 0 -> Q is Q1; Q is Q1 - B1 // B), R is A - B*Q. % 条件は % A = B * Q + R, - abs(B)/2 < R < abs(B)/2 % 余りの絶対値が最も小さくなる。「余りの絶対値最小割り算」というらしい。 res_q2(A = B*Q + R) :- abs(B, B1), Q1 is A // B, (A - B*Q1 >= B1/2 -> Q is Q1 + B1 // B; -B1/2 >= A - B*Q1 -> Q is Q1 - B1 // B; Q is Q1), R is A - B*Q.