【余り算の使い方】数字の周期性と剰余を使って複座な数式を解く方法

  • このエントリーをはてなブックマークに追加
  • Pocket

こんにちは。タクマ™ [@suwaru_blog] です。

今回は剰余を使ったグループ分けについて解説します。
なんらかの数字の法則性を発見できると、剰余でなんでもグループ分けが可能です!

グループ分けができると、複雑な数式でもパターンで答えを導けます。
この記事を読めば、プログラミングの余り算の使い時が分かるようになりますよ。

剰余とは

割り算すると必ず「余り」が出ます。 (余り 0 を含む)
これでグループ分けを行うことができます。

余りのことは、専門用語で「剰余」と呼びます。
また、余りだけに注目した割り算を「余り算」と言ったりもします。

奇数と偶数

余り算の代表的なグループ分けに「偶数・奇数」があります。

  • 奇数とは
    • 2 で割ると余りが 1 になる整数のこと
  • 偶数とは
    • 2 で割ると余りが 0 になる整数のこと

これは知っている方も多いかと思います。

周期性と剰余

奇数・偶数以外にも「剰余によるグループ分け」は可能です。

曜日クイズ

100 日後は何曜日?

今日が日曜日の場合、100 日後は何曜日になるでしょうか?

一週間は 7 日で、7 日ごとに同じ曜日がやってきます。
つまり 7 の倍数は「日曜日」になることがわかります。

100 / 7 = 14 余り 2 と計算すると 14 回目の日曜日の 2 日後が 100 日目であり、
「日曜日」の 2 日後は「火曜日」ということが導けます。

1 億日後は何曜日?

今日が日曜日の場合、100000000 日後は何曜日になるでしょうか?

100000000 / 7 = 14285714 余り 2 なので、
これも「火曜日」ということが導けます。注目すべきは剰余の 2 です。

n 日後は何曜日?

つまり n 日後の曜日は n / 7 の剰余から「パターン」で求めることができます。
曜日は 7 を周期として繰り返しているので、こういった計算が可能なのです。

こういった繰り返しの規則性のことを「周期性」と呼びます。

10^100 日後は何曜日?

今日が日曜日の場合、10 の 100 乗日後は何曜日になるでしょうか?

7 の周期性で考える (数の周期性)

10^100 / 7 の計算は少し大変そうです。
まず 7 の周期性を使ってみて、別の周期性もないか探してみましょう。

1 日後… 10 日後… 100 日後… 1000 日後… と、
0 の個数を徐々に増やしたときの曜日を検証してみます。

0 の個数n 日後n / 7曜日
0個1 (10^0)1/7 = 0 余り 1
1個10 (10^1)10/7 = 1 余り 3
2個100 (10^2)100/7 = 14 余り 2
3個1000 (10^3)1000/7 = 142 余り 6
4個10000 (10^4)10000/7 = 1428 余り 4
5個100000 (10^5)100000/7 = 14285 余り 5
6個1000000 (10^6)1000000/7 = 142857 余り 1
7個10000000 (10^7)10000000/7 = 1428571 余り 3
8個100000000 (10^8)100000000/7 = 14285714 余り 2
9個1000000000 (10^9)1000000000/7 = 142857142 余り 6
10個10000000000 (10^10)10000000000/7 = 1428571428 余り 4
11個100000000000 (10^11)100000000000/7 = 14285714285 余り 5
12個1000000000000 (10^12)1000000000000/7 = 142857142857 余り 1

7 の周期性だと n / 7 で「1, 3, 4, 6, 2, 5」という剰余を繰り返すため、
曜日も「月, 水, 火, 土, 木, 金」を繰り返していることが分かります。

つまり 0 の数が 6 増えると、同じ曜日になっています。
このことから 6 の周期性が存在していることが分かります。

6 の周期性で考える (0 の個数の周期性)

ある値を「周期」で割れば、その剰余でグループ分けできることを思い出してください。

0 の個数 / 6 の剰余は「0, 1, 2, 3, 4, 5」のいずれかになります。
剰余に対応する曜日さえ把握していれば、0 が 100 個のときの曜日も分かります。

0 の個数0 の個数 / 6曜日
0個0 / 6 = 0 余り 0
1個1 / 6 = 0 余り 1
2個2 / 6 = 0 余り 2
3個3 / 6 = 0 余り 3
4個4 / 6 = 0 余り 4
5個5 / 6 = 0 余り 5
6個6 / 6 = 1 余り 0
7個7 / 6 = 1 余り 1
8個8 / 6 = 1 余り 2
9個9 / 6 = 1 余り 3
10個10 / 6 = 1 余り 4
11個11 / 6 = 1 余り 5
12個12 / 6 = 1 余り 0
100個100 / 6 = 16 余り 4

100 / 6 の剰余は 4 なので、剰余が 4 のときに対応する曜日を見ればよいですね。
10^100 日後の曜日は「木曜日」であることがわかります。

10^100000000 日後は何曜日?

100000000 / 6 = 16666666 余り 4 なので、
10^100000000 日後の曜日も「木曜日」であることがわかります。

このような大きい数を扱うときは周期性を見抜くことが重要です。
そして剰余を使うと「周期性でグループ分け」することが可能です。

0 の個数に注目すると、大きい数の取り扱いがラクになることも分かったと思います。

累乗クイズ

1234567^987654321 の一の位は?

1234567^987654321 は電卓でも計算できません。
1234567^1 とか 1234567^2 ですら大きな数字になってしまいます。

ですが、今回は一の位だけ分かればいいことにします。
なので「規則性」さえ見つかれば、もっと単純な話になります。

一の位に影響を与えるのは一の位だけ

1234567^n の計算結果で「一の位に影響を与えるのは、一の位どうしの掛け算 (累乗) 」です。
つまり一の位 7 の累乗だけを追いかけて、その計算結果の一の位に注目しましょう。

7^n7^n の一の位0 の個数 / 4備考
7^0 = 110 / 4 = 0 余り 01234567^0 の一の位
7^1 = 771 / 4 = 0 余り 11234567^1 の一の位
7^2 = 4992 / 4 = 0 余り 21234567^2 の一の位
7^3 = 34333 / 4 = 0 余り 31234567^3 の一の位
7^4 = 240114 / 4 = 1 余り 01234567^4 の一の位
7^5 = 1680775 / 4 = 1 余り 11234567^5 の一の位
7^6 = 11764996 / 4 = 1 余り 21234567^6 の一の位
7^7 = 82354337 / 4 = 1 余り 31234567^7 の一の位
7^8 = 576480118 / 4 = 2 余り 01234567^8 の一の位
7^9 = 4035360779 / 4 = 2 余り 11234567^9 の一の位

一の位は 1, 7, 9, 3 の値を繰り返しているので「周期性」は 4 といえます。
つまり指数 987654321 を 4 で割ったときの剰余を確認すればよいことになります。

987654321 / 4 = 246913580 余り 1 で剰余が 1 なので、
それに対応する一の位は 7 となります。

1234567^987654321 の一の位は 7 になる、が答えです。

「剰余を使って、大きな数の問題を小さな数の問題に落としこむ」基本的な考え方を解説しました。

CS シリーズ

次回

前回

お仕事ください!

僕が代表を務める 株式会社 EeeeG では Web 制作・システム開発・マーケティング相談を行っています。
なにかお困りごとがあれば、Twitter DM や Web サイトからお気軽にご相談ください。

コメント

コメントを残す

*