平成20年春期  午前問12

うたこさん  
(No.1)
もっと短時間で解きたいです。
mod(データ,8)  と、除数が8(=2の3乗)なので、
①9個の16進数の1桁目だけに注目して、それぞれ2進数にする。
②2進数にした値を右に3ビットシフト
③あふれた3ビットを比較すると、
  010、101、011、100、110、001、111、010、011

  1Aの余り(010)とB2の余り(010)  が最初に衝突します。

2018.02.06 20:56
通りすがりの者さん 
(No.2)
このサイトの解説は正攻法ですが、私はいつも効率的に解くことを考えます。

このハッシュ関数は8で割った余りですが、16進数の左側(16の桁)は必ず8で割り切れますので、右側(1の桁)だけを8で割った余りと一致します。

順番に、
Aは余り2、
5は余り5、
Bは余り3、
4は余り4、
Eは余り6、
1は余り1、
Fは余り7、
2は余り2、
3は余り3
となり、1AとB2が最初に衝突します。

しかし、たまたま8で割った余りの問題だからこのように解けますが、例えば11で割った余りなどで出たら、正攻法しかありません。
2018.02.06 21:18

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop