Python 3 で数学を。

Python 3 とライブラリで数学の問題を解いていきます。統計学や機械学習はときどき。

剰余。周期性。10^100 日後は何曜日か。(Python 3: while, %)

使用するライブラリ

なし

Python 3 コード

my_mod.py

#!/usr/bin/env python3


"""(docstring)
"""


def my_mod():
    """(docstirng)
    """
    # 問題: 今日は日曜日、10^100 日後は何曜日か。

    # 周期性を見てみる:
    # 剰余の 1 は月曜日, 2 は火曜日, ... , 6 は土曜日
    print('(左端はゼロの個数)')
    zeros = 0
    counter = 1
    while True:
        print('{} {} 日後の曜日, {} % 7 = {}'.format(zeros, counter, counter, counter % 7))
        if counter == 1000000000000:
            break
        counter *= 10
        zeros += 1
    print('周期は 6')
    print('')

    print('ゼロの個数を 6 で割ったときの剰余:')
    zeros = 0
    while True:
        print(zeros % 6)
        if zeros == 11:
            break
        zeros += 1
    print('剰余 0, 1, 2, 3, 4, 5 は、月、水、火、土、木、金に対応。')
    print('')

    print('解答:')
    print('100 % 6 =', 100 % 6, 'で 10^100 日後の曜日は木曜日。')
    print('')

    print('手持ちの関数電卓では無理だったが、Python なら 10^100 も計算できる:')
    print((10**100) % 6)


if __name__ == '__main__':
    my_mod()

出力

$ python3 my_mod.py
(左端はゼロの個数)
0 1 日後の曜日, 1 % 7 = 1
1 10 日後の曜日, 10 % 7 = 3
2 100 日後の曜日, 100 % 7 = 2
3 1000 日後の曜日, 1000 % 7 = 6
4 10000 日後の曜日, 10000 % 7 = 4
5 100000 日後の曜日, 100000 % 7 = 5
6 1000000 日後の曜日, 1000000 % 7 = 1
7 10000000 日後の曜日, 10000000 % 7 = 3
8 100000000 日後の曜日, 100000000 % 7 = 2
9 1000000000 日後の曜日, 1000000000 % 7 = 6
10 10000000000 日後の曜日, 10000000000 % 7 = 4
11 100000000000 日後の曜日, 100000000000 % 7 = 5
12 1000000000000 日後の曜日, 1000000000000 % 7 = 1
周期は 6

ゼロの個数を 6 で割ったときの剰余:
0
1
2
3
4
5
0
1
2
3
4
5
剰余 0, 1, 2, 3, 4, 5 は、月、水、火、土、木、金に対応。

解答:
100 % 6 = 4 で 10^100 日後の曜日は木曜日。

手持ちの関数電卓では無理だったが、Python なら 10^100 も計算できる:
4

参考文献

プログラマの数学

プログラマの数学

第 2 版が出ている:

プログラマの数学第2版

プログラマの数学第2版