2024-12-11
(数式を TEX で出力できるように日々奮闘中) の計算結果を既約分数で出力したかった。そこで次の Python 組み込みライブラリを使用した。
https://docs.python.org/ja/3/library/fractions.html
from fractions import Fraction # mの範囲を指定 m_values = range(1, 30) # ヘッダーを表示 header = ( f"{'m':>4} | {'Numerator':>16} | {'Denominator':>16} | " f"{'Fraction':>16} | {'is Integer':>16}" ) separator = "-" * len(header) print(header) print(separator) for m in m_values: numerator = 2 * (2**m - 1) - 3 denominator = 9 fraction = Fraction(numerator, denominator) is_integer = fraction.denominator == 1 # 計算結果を表示 row = ( f"{m:>4} | {fraction.numerator:>16} | {fraction.denominator:>16} | " f"{str(fraction):>16} | {str(is_integer):>16}" ) print(row)
$ python3 sample.py m | Numerator | Denominator | Fraction | is Integer ---------------------------------------------------------------------------------- 1 | -1 | 9 | -1/9 | False 2 | 1 | 3 | 1/3 | False 3 | 11 | 9 | 11/9 | False 4 | 3 | 1 | 3 | True 5 | 59 | 9 | 59/9 | False 6 | 41 | 3 | 41/3 | False 7 | 251 | 9 | 251/9 | False 8 | 169 | 3 | 169/3 | False 9 | 1019 | 9 | 1019/9 | False 10 | 227 | 1 | 227 | True 11 | 4091 | 9 | 4091/9 | False 12 | 2729 | 3 | 2729/3 | False 13 | 16379 | 9 | 16379/9 | False 14 | 10921 | 3 | 10921/3 | False 15 | 65531 | 9 | 65531/9 | False 16 | 14563 | 1 | 14563 | True 17 | 262139 | 9 | 262139/9 | False 18 | 174761 | 3 | 174761/3 | False 19 | 1048571 | 9 | 1048571/9 | False 20 | 699049 | 3 | 699049/3 | False 21 | 4194299 | 9 | 4194299/9 | False 22 | 932067 | 1 | 932067 | True 23 | 16777211 | 9 | 16777211/9 | False 24 | 11184809 | 3 | 11184809/3 | False 25 | 67108859 | 9 | 67108859/9 | False 26 | 44739241 | 3 | 44739241/3 | False 27 | 268435451 | 9 | 268435451/9 | False 28 | 59652323 | 1 | 59652323 | True 29 | 1073741819 | 9 | 1073741819/9 | False
整数かどうかの判定を
is_integer = fraction.denominator == 1
で行っているが、Python 3.12 から is_integer()
が導入されたらしい。
fractions --- 有理数 is_integer()
:>
で右寄せできることを初めて知った。
のとき整数になっている。この理由は 2 の mod 9 での位数が 6 だから。