作者: MATSUI Fe2+ Tetsushi
日時: 2008/1/09(22:25)
Fe2+ です。

At Wed,  9 Jan 2008 17:37:01 +0900 (JST),
機械伯爵 wrote:
> 
>  えと、互除法による最大公約数をPythonで書こうとすると、
> 
> gcm = lambda a, b: b if (a % b == 0) else gcm(b, (a % b))
> 
>  で、良いと思うのだけど、これ以上簡単になったかしらん?
> 
> ※コレ↓は反則
>  gcm = lambda a, b: b if not a % b else gcm(b, (a % b))

最大 greatest 公 common 約数 divisor なので、gcm ではなく gcd です。
最小 least 公 common 倍数 multiple なら lcm ですが。

def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

の方が私は「簡単」だと思います。いきなり ZeroDivisionError を吐いたり
しませんし、再帰で限界が来たりもしません。入力に 0 を許さないとか、大
きな数は扱わない、という*仕様*であれば反対する理由はありませんけど。

-- 
MATSUI "Fe2+" Tetsushi