Python 3 で数学を。

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

アルゴリズム。素因数分解。(Python 3)

使用するライブラリ

なし

Python 3 コード

factoriz.py

(例外処理はざっとやっているだけ)。

#!/usr/bin/env python3


"""(docstring)
"""


def factoriz(x):
    """(docstring)
    """
    # 小数点以下切り捨て。
    x = int(x)

    if x <= 1:
        return print('2 以上の数値を使用してください。')

    print('{} = '.format(x), end='')

    while x >= 4 and x % 2 == 0:
        print('2 * ', end='')
        x //= 2

    d = 3
    q = x // d
    while q >= d:
        if x % d == 0:
            print('{} * '.format(d), end='')
            x = q
        else:
            d += 2
        q = x // d

    print('{}'.format(x))


if __name__ == '__main__':
    print('簡単な例外処理:')
    print('')
    print('2 以上の数値の小数は小数点以下を切り捨てて計算:')
    print('2.0: ', end='')
    factoriz(2.0)
    print('2.1: ', end='')
    factoriz(2.1)
    print('4.1: ', end='')
    factoriz(4.1)
    print('')

    print('1.9 以下の数値が使用された場合:')
    print('1.9: ', end='')
    factoriz(1.9)
    print('1: ', end='')
    factoriz(1)
    print('0: ', end='')
    factoriz(0)
    print('-1.1: ', end='')
    factoriz(-1.1)
    print('')
    print('-'*79)

    print('素因数分解:')
    factoriz(360)
    print('')

    print('for 文で、2 から 50 までを素因数分解:')
    for n in range(2, 51):
        factoriz(n)

出力

$ python3 factoriz.py
簡単な例外処理:

2 以上の数値の小数は小数点以下を切り捨てて計算:
2.0: 2 = 2
2.1: 2 = 2
4.1: 4 = 2 * 2

1.9 以下の数値が使用された場合:
1.9: 2 以上の数値を使用してください。
1: 2 以上の数値を使用してください。
0: 2 以上の数値を使用してください。
-1.1: 2 以上の数値を使用してください。

-------------------------------------------------------------------------------
素因数分解:
360 = 2 * 2 * 2 * 3 * 3 * 5

for 文で、2 から 50 までを素因数分解:
2 = 2
3 = 3
4 = 2 * 2
5 = 5
6 = 2 * 3
7 = 7
8 = 2 * 2 * 2
9 = 3 * 3
10 = 2 * 5
11 = 11
12 = 2 * 2 * 3
13 = 13
14 = 2 * 7
15 = 3 * 5
16 = 2 * 2 * 2 * 2
17 = 17
18 = 2 * 3 * 3
19 = 19
20 = 2 * 2 * 5
21 = 3 * 7
22 = 2 * 11
23 = 23
24 = 2 * 2 * 2 * 3
25 = 5 * 5
26 = 2 * 13
27 = 3 * 3 * 3
28 = 2 * 2 * 7
29 = 29
30 = 2 * 3 * 5
31 = 31
32 = 2 * 2 * 2 * 2 * 2
33 = 3 * 11
34 = 2 * 17
35 = 5 * 7
36 = 2 * 2 * 3 * 3
37 = 37
38 = 2 * 19
39 = 3 * 13
40 = 2 * 2 * 2 * 5
41 = 41
42 = 2 * 3 * 7
43 = 43
44 = 2 * 2 * 11
45 = 3 * 3 * 5
46 = 2 * 23
47 = 47
48 = 2 * 2 * 2 * 2 * 3
49 = 7 * 7
50 = 2 * 5 * 5

参考文献

C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)

C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)

なお、新版が出ている:

[改訂新版]C言語による標準アルゴリズム事典 (Software Technology)

[改訂新版]C言語による標準アルゴリズム事典 (Software Technology)

関連過去記事

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com