📅  最后修改于: 2023-12-03 15:34:00.226000             🧑  作者: Mango
最大公约数(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解决求最大公约数问题的方法,欢迎大家试试,提高自己的编程能力!