6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

python3でN個の整数の最小公倍数・最大公約数を求める

Last updated at Posted at 2019-06-12

こんにちは。最近Pythonの勉強を始めて、Pythonのお勉強 問題集というサイトの問題を解いているのですが、知識の整理を兼ねてアウトプットしたいと思います。
今回は、N個の整数の最小公倍数・最大公約数を求める問題です。ちなみに初投稿です。
#2整数の最大公約数を求める
Pythonのお勉強 問題集では二つの数字の最大公約数をユークリッドの互除法を用いて解け、とあるのでまずそちらから。

exmple.py
def euclid(a, b):
    while b:
        a, b = b, a%b
    return a

###再帰関数を使う(追記 2019/06/13)
再帰関数を用いた方がいいというコメントを頂いたので書いてみます。

exmple.py
def euclid(a, b):
    if b == 0:
        return a
    else:
        return euclid(b, a%b)

#N個の整数の最大公約数を求める
やや応用としてN個の整数の最大公約数を求めてみたいと思います。
###functools.reduceを使う(追記 2019/06/13)
functools.reduceを使うと便利というコメントを頂いたので使ってみます。

exmple.py
import functools


def gcd(nums):
    return functools.reduce(euclid, nums)


num = list(map(int, input().split()))
print(gcd(num))

このモジュールを利用することで、例えばnum = [1, 2, 3, 4]において、euclidの引数を(((1,2),3),4)といったようにして順に関数を実行することができます。

#2整数の最小公倍数を求める
最小公倍数は2整数を掛けた値を2整数の最大公約数で割ればいいので

exmple.py
def multiple(a, b):
    return a*b // euclid(a, b)

#N個の整数の最小公倍数を求める
N個の整数の最大公約数のときと同様にfunctools.reduceを使って書いてみます。

exmple.py
import functools


def lcm(nums):
        return functools.reduce(multiple, nums)


num = list(map(int, input().split()))
print(lcm(num))

#おわりに
引数を一つ前の実行結果に依存した繰り返し処理を実行したいときにfunctools.reduceがとても便利ですね。
コメントありがとうございます。

6
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?