解析エンジニアの自動化 blog

コツコツと自動化した方法を残す blog

Python で最大公約数を求める



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


最大公約数を求めるなんて、とても地味ですが、図形を分割したりする際にとても重要だったりします。

かなり単純なソースコードと出力になりますが、入力値に対して最大公約数を求めます。



動作環境


Windows 10
・winpython 64bit 3.4.4



プログラム

ソースコード


###############################################################################
# 最大公約数計算プログラム
###############################################################################
#==============================================================================
# ライブラリインポート
#==============================================================================
import fractions
from functools import reduce
 
#==============================================================================
# 関数
#==============================================================================
def gcd(*values):
    return reduce(fractions.gcd, values)
 
#==============================================================================
# 最大公約数を求める値
#==============================================================================
a = 1000.0112354
b = 307
c = 401
 
#==============================================================================
# 最大公約数計算
#==============================================================================
aa = gcd(a, b, c)
 
#==============================================================================
# 表示
#==============================================================================
print('値 = ' + str(a) + ', '  + str(b) + ', '  + str(c))
print('最大公約数 = ' + str(aa))
print(' a/aa = ' + str(a/aa))
print(' b/aa = ' + str(b/aa))
print(' c/aa = ' + str(c/aa))



結果

3つの値 1000.0112354 、 307 、 401 の最大公約数は 2.2737367544323206e-13 と求まりました。

実際の出力結果を下に示します。


In [1]: runfile('C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3/Greatest-Common-Divisor000.py', wdir='C:/WinPython-64bit-3.4.4.6Qt5/settings/.spyder-py3')
値 = 1000.0112354, 307, 401
最大公約数 = 2.2737367544323206e-13
a/aa = 4398095924915771.0
b/aa = 1350200278908928.0
c/aa = 1763616650952704.0



コメント

実用的な関数ではないですが、最大公約数を戻ることは重要で有益な事なので、覚えておこうと思います。



以上