応用情報技術者 2011年 春期 午前2 問01
問題文
整数Aを整数Bで割った余り が次のとおり定義されているとき、適切な式はどれか。
〔の定義〕
は、除数と同じ符号をもつ整数又は0であり、その絶対値は、の絶対値よりも小さい。ある整数を選ぶことによって、
が成立する。
選択肢
ア:rem(11, 5) = 2
イ:rem(11, -5) = -1
ウ:rem(12, -5) = -3(正解)
エ:rem(-11, 5) = 1
🔒 解説は解答すると表示されます
剰余の符号規則【午前2解説】
正解の理由
定義により、余りrem(A, B) は「除数Bと同じ符号(または0)で、かつその絶対値が |B| より小さい」整数です。選択肢のうち、12を -5で割る形で
となるように整数Nを選び、かつrが負(除数 -5と同符号)で を満たすのは、 のときに
となり、余り が得られます。したがって ウ のrem(12, -5) = -3が定義に合致します。
解法ステップ
- 除数Bの符号を確認する(正/負)。
- 整数Nを適切に選び、 が「除数と同符号(または0)であり、絶対値が 未満」になるようにする。
- 具体的には、数学的な床関数を使うと簡潔に求められる:整数商を とすると
が成り立ちます。特に実装ではPythonの
//(床除算)やmath.floorを使うと誤りが少なくなります。
例(今回の問題の流れ):
- B=-5(負)なので余りは負または0。
- A/B = 12/(-5) = -2.4、 より 。
選択肢別の誤答解説
-
ア: rem(11,5) = 2
11 = 5×2 + 1で余りは1です。余りの符号(5と同符号の正)および絶対値条件は満たしますが、与えられた値2は成り立ちません。正しくはrem(11,5)=1。 -
イ: rem(11,-5) = -1
一見11 = (-5)×(-2) + 1と置けるため「余り1」が得られますが、余り1は除数 -5と符号が異なり定義に反します。正しいNを選ぶと11 = (-5)×(-3) + (-4) となり、rem(11,-5) = -4です(余りは除数と同符号=負、かつ |r|<5を満たす)。 -
ウ: rem(12,-5) = -3
上述のように12 = (-5)×(-3) + (-3) で余り -3は除数 -5と同符号かつ |−3|<5を満たすため正しい。 -
エ: rem(-11,5) = 1
-11 = 5×(-3) + 4で余りは4になります(除数5と同符号の正、かつ |4|<5)。したがってrem(-11,5)=4であり、1は誤りです。補足として「除数が正なら余りは非負(0以上)」です。
よくある誤解
- 余りの符号は被除数(A)に合わせると誤る
被除数の符号ではなく「除数(B)の符号」に合わせるのが定義です(もしくは0)。 - 0方向への切り捨て(商を切り捨てる)で余りを求めると失敗する場合がある
特に負の除数や被除数があると、商を「整数に単純に切り捨て(符号方向に切る)」する方法では定義条件を満たさない余りになることがあるため、数学的な床(floor)を使うのが安全です。 - プログラミング言語の % の挙動をそのまま鵜呑みにすると危険
言語によって剰余の定義が異なるため注意が必要です(下の補足参照)。
補足コラム
- 数学的定義(今回の定義)に沿う実用的な計算式は です()。この式は除数の符号に依存せず正しく余りを与えます。
- プログラミング言語の例:Pythonの
A % Bはこの数学的定義に従い、余りは除数Bと同符号になります(例: 11 % -5 = -4、-11 % 5 = 4)。一方、C言語の%演算子は商の切り方向によって挙動が異なる歴史的経緯があり、言語仕様やバージョンによって扱いが異なるため注意が必要です。
簡単なPython例:
A = 11
B = -5
import math
q = math.floor(A / B) # -3
r = A - B * q # -4
print(r) # -4
FAQ
Q1. 除数が負のときはどうやって商Nを見つければよいですか?
A1. A/Bの値を計算して数学的床(floor)を取ると良いです。 をNとすると余りは上の式で直接得られます。
A1. A/Bの値を計算して数学的床(floor)を取ると良いです。 をNとすると余りは上の式で直接得られます。
Q2. 余りが0のときは符号はどう扱う?
A2. 余り0はどちらの符号とも矛盾しないため許容されます(定義中の「除数と同じ符号又は0」に合致)。
A2. 余り0はどちらの符号とも矛盾しないため許容されます(定義中の「除数と同じ符号又は0」に合致)。
Q3. 商を単に切り捨て(0方向)してもだめですか?
A3. 被除数と除数が異符号のときは、0方向への切り捨て(整数部の単純取り)では余りが除数と異符号になりがちで、定義に合わない場合があります。床(floor)を使うことを推奨します。
A3. 被除数と除数が異符号のときは、0方向への切り捨て(整数部の単純取り)では余りが除数と異符号になりがちで、定義に合わない場合があります。床(floor)を使うことを推奨します。
関連キーワード: 剰余、符号規則、床関数、負の除算、剰余算査定

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

