python求解公约数

Python 2018-07-15 1844

今天在一个地方看见一个人求助计算公约数的变式题,最关键的是计算最大公约数。发现自己完全不知道如何计算,太失败了,看来学的还不扎实。下面总结python的公约数求解。

1.递归
例如,求(319,377):
∵ 319%377=0(余319)
∴(319,377)=(377,319);
∵ 377%319=1(余58)
∴(377,319)=(319,58);
∵ 319%58=5(余29)
∴ (319,58)=(58,29);
∵ 58%29=2(余0)
(58,29)= 29;
 (319,377)=29。

def abc(x,y):  
    if x y:#  ---当xy时,交换位置。  
        x,y = y,x

    if x % y == 0:#  ---当x对y取余时,等于0时,这时x=y  
        return y  
    else:  
        y = x%y  
        return abc(x,y)#  --递归不断计算  

print(abc(319, 377))  

2.也算递归吧,不过更为简洁

def gcd(x,y):  
    return y if x%y == 0 else gcd(y,x%y)  
print(gcd(319,377))  

3.内置方法

import math  
math.gcd(319,377)  
>>>29  

 

标签:Python

文章评论

评论列表

已有0条评论