見出し画像

剰余

算数が苦手な人でも意味を理解するのは易しいのにあまり知られてない剰余の話。

長さが0でないリストの n 番目の要素を得るときに、リストサイズチェックの手を抜いて、

list[n % list.count]

と書くことがある。list[0] とはリストの0番目の値(大半のプログラム言語では○番目と数える際に0から始まる)という意味だ。n 番目なら list[n] で良さそうなものだが、リストに含まれる要素の数を超えるとエラーとなってしまうので通常は n とリストの要素数を比較して範囲外だったらエラーにするといった操作が必要となる。それを「とりあえずいつでもエラーにならなければ良い」という安易なスピリッツで回避したのが上記の書き方だ。

% は剰余といって割り算の余りの数を表す。例えば 17 % 7 = 3 となる(17 ÷ 7 = 2 あまり 3 )。言語によっては mod(17, 7) のように mod という関数を使って書くこともある。

この剰余を使う方法のメリットは3つあってひとつは先に書いたとおり n が大きくても落ちないこと、2つめは n が大きかった場合の処理を考えなくて良いこと、3つめは処理が1行で済むことだ。

もちろんデメリットもある。n が大きくてもエラーにならないので、n が想定される値よりも大きいというミスが検出されにくいという点だ。でも、そのようなデメリットのために

if n < list.count {
    result = list[n]
} else {
    result = 代わりの値
    ここでエラー処理
}

なんてやってられないよ!というなめた考えで使うのだ。

この剰余というのは割り算を習っていれば小学生(4年生くらい?)でも理解し計算することもできる簡単な演算だが、数学的にはなかなか面白いもので、わりとくらくらする話ばかりの数論という分野の入り口で登場する。

あと数学には珍しく実用的な話にも関係があって、暗号理論の初歩の初歩の初歩くらいから登場する。

この記事が気に入ったらサポートをしてみませんか?