分式化简_辗转相除法

/ 0评 / 0

刚才查看了一下手机设备信息,发现屏幕分辨率是3200:1440
然后就联想到一般的设备屏幕宽高比应该是16:9
那我的宽高比是多少呢?用计算器算,我真不知道该怎么快速算出来
于是就去了解了一下分式化简的算法,最后自己看百度百科用Python实现了,做个记录。

def gcd(a, b):
    """
      辗转相除法获取a, b的最大公约数
    """

    m = max(a, b)
    n = min(a, b)
    r = m % n # 余数

    while r > 0:
        _r = r
        r = n % r
        n = _r

    return n

def simple(a, b):

    r = gcd(a, b)

    return (a / r, b / r)

print(simple(3200, 1440))

# (20.0, 9.0)

哈哈,最后得出我手机屏幕宽高比为20:9,好像是比电脑的16:9窄长了一点。

最后不得不说欧几里得是个伟大的数学家。

参考:欧几里得算法_百度百科


更新:2021/8/21

刚看到一篇知乎文章,有更简洁的写法,遂参考做出修改如下:

def gcd(a, b):
    """
      辗转相除法获取a, b的最大公约数
    """

    if a < b: return gcd(b, a)

    while b > 0:

        a, b = b, a % b

    return a

def simple(a, b):

    r = gcd(a, b)

    return (a / r, b / r)

print(simple(3200, 1440))

# (20.0, 9.0)

发表回复