基本情報技術者 2013年 秋期 午前(科目A) 問03
問題文
4桁の整数から、次の方法によって検査数字(チェックディジット)を計算したところ、となった。, , のとき, の値は幾らか。ここで、mod(, )は、をで割った余りとする。
検査数字:
選択肢
ア:0
イ:2
ウ:4(正解)
エ:6
🔒 解説は解答すると表示されます
加重和によるチェック桁【午前解説】
正解の理由
検査数字の計算式は です。与えられた値を代入すると既知の部分は
で合計 となります。したがって
()となり、 から
です。ここで千の位 は1〜9の一桁整数なので可能な値は のみです。よって正しい選択肢は ウ です。
解法ステップ
- 与えられた各桁の重み付き積を計算する:。
- それらを足して既知部分の和 を得る。
- 式を整理して とする( のため)。
- を満たす を千の位の範囲 で探し、 を決定する。
選択肢別の誤答解説
- ア: 0 — を代入すると合計は で となり にならない。また千の位が0だと4桁の整数にならない。
- イ: 2 — のとき合計は 、 で にならない。
- ウ: 4 — のとき合計は 、 で条件を満たす(かつ千の位の範囲内)。
- エ: 6 — のとき合計は 、 で にならない。
よくある誤解
- 千の位を含む最上位桁は 0 〜 9 と誤認するケース:4桁整数の千の位 は 1〜9 の範囲である点を忘れない。
- 既知部分の和を簡略化せずそのまま計算ミスする:重み付き和を先に合算してから modulo を取ると楽。
- mod 演算の性質()を使わないため計算が冗長になる。
補足コラム
一般化すると、既知の桁部分の重み付き和を とすると
で求められます。ただし千の位の取りうる値が に制限されるため、求めた剰余が 0 の場合は有効な は存在しません(剰余が 1〜9 の場合は一意に決まる)。小さなプログラム例:
def find_N1(N2, N3, N4, C):
S = N2*2 + N3*3 + N4*4
residue = (C - (S % 10)) % 10
if 1 <= residue <= 9:
return residue
return None # 有効な千の位なし
print(find_N1(7,6,2,4)) # 出力 4
FAQ
Q: 千の位が0でもよいのでは?
A: 4桁の整数では千の位は 1〜9 の一桁整数です。0だと 4桁でなくなるため除外します。
A: 4桁の整数では千の位は 1〜9 の一桁整数です。0だと 4桁でなくなるため除外します。
Q: 剰余が0になったらどうする?
A: その場合 となりますが千の位の範囲に 0 は含まれないため、有効な解は存在しません。
A: その場合 となりますが千の位の範囲に 0 は含まれないため、有効な解は存在しません。
Q: 重みが変われば解法は変わるか?
A: アルゴリズム自体は同じです。既知部分の重み付き和を求め、 の重み分を整理して modulo で解きます。
A: アルゴリズム自体は同じです。既知部分の重み付き和を求め、 の重み分を整理して modulo で解きます。
関連キーワード: チェックディジット、加重和、剰余演算、モジュロ演算、千の位

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

