📜  python find HCF - Python (1)

📅  最后修改于: 2023-12-03 15:34:00.226000             🧑  作者: Mango

Python求最大公约数

最大公约数(GCD)是指两个或多个整数的公共约数中最大的一个。在本篇文章中,我们将使用Python编写一个函数,以求出给定整数的最大公约数。

暴力法

首先,我们将使用最简单的方法 - 暴力法来解决这个问题。暴力法会将两个整数的所有可能的约数从大到小遍历,并返回最大公约数。

def find_hcf(num1, num2):
    """使用暴力法来计算最大公约数"""
    smaller = num1 if num1 < num2 else num2
    hcf = 1
    for i in range(1, smaller+1):
        if((num1 % i == 0) and (num2 % i == 0)):
            hcf = i
    return hcf

# 测试暴力法
print(find_hcf(56, 48)) # 8
辗转相除法

辗转相除法也叫欧几里德算法,是计算两个数最大公约数的常用方法。其基本原理是用较小的数除较大的数,接着用余数作为被除数去除被除数,如此反复,直到余数为0为止。此时,较小的数就是这两个数的最大公约数。

def find_hcf(num1, num2):
    """使用辗转相除法来计算最大公约数"""
    while(num2):
        num1, num2 = num2, num1 % num2
    return num1

# 测试辗转相除法
print(find_hcf(56, 48)) # 8
更好地测试

为了更好地测试我们的函数,我们使用unittest模块编写测试用例。

import unittest

class TestHCF(unittest.TestCase):
    """测试find_hcf函数"""

    def test_hcf(self):
        self.assertEqual(find_hcf(56, 48), 8)
        self.assertEqual(find_hcf(0, 5), 5)
        self.assertEqual(find_hcf(10, 0), 10)
        self.assertEqual(find_hcf(-56, 48), 8)
        self.assertEqual(find_hcf(56, -48), 8)
        self.assertEqual(find_hcf(2, 6), 2)
        self.assertEqual(find_hcf(27, 18), 9)

if __name__ == '__main__':
    unittest.main()

以上是使用Python解决求最大公约数问题的方法,欢迎大家试试,提高自己的编程能力!