Python求两个整数的最大公约数(GCD)

Python每日一练

文章目录

  • Python每日一练
  • 问题:
  • 代码实现
    • 示例输入:
    • 示例输出:
    • 总结
      • 示例输出:
      • 示例输出:
      • 示例输出:

        问题:

        编写一个函数,用于求两个整数的最大公约数(GCD)。

        定义函数find_gcd(),有两个数字参数a和b。

        在函数内部,返回a和b的最大公约数。

        题目来源:PythonTip

        https://edu.py2fun.com/


        代码实现

        代码如下(示例):

        def find_gcd(a, b):
            # 在此处编写代码
            l1 = []		# 定义两个空列表,用来存储两个数的约数
            l2 = []
            for i in range(1,a+1):		# 根据约数的定义,从1到自身的数,凡是能整除的都是该数的约数,
            							# 需要注意Python中range(1,a),并不包含a,因此为了包括该数自身,应为a+1
                if a % i == 0:
                    l1.append(i)
            for i in range(1,b+1):
                if b % i == 0:
                    l2.append(i)
            l2.sort()		# 对其中一个列表排序
            for i in range(len(l2)-1,-1,-1):		# 由于sort()函数默认是从小到大排序,因此range()反着取值
                if l2[i] in l1:		# 依次查找,因为l2是有序的,所以当l2中倒数第i个在l1中时,最大公约数出现
                    return l2[i]
        # 输入整数
        first_number = int(input())
        second_number = int(input())
        # 调用函数
        print(find_gcd(first_number, second_number))
        

        示例输入:

        32

        8

        示例输出:

        8


        总结

        算法思想都在上述代码的注释中了,无需多言。

        这里简单介绍一下Python中列表的排序算法,主要介绍一下它的内置函数sort(),如果有读者对数据结构的排序算法感兴趣,可以移步我的另一个专栏 python实现排序算法 。

        sort()函数是一个非常强大的工具,用于对列表进行排序。它可以根据特定的排序规则,对列表元素进行升序或降序排列。另外,sort()函数会直接修改原始列表,而不是返回一个新的排好序的列表副本。

        sort()函数的基本语法为:

        list.sort(key=None, reverse=False)

        其中,key和reverse都是可选参数。

        key:用于指定一个函数,根据该函数的返回值对列表进行排序。默认值为None,表示使用列表元素自身的值进行排序。

        reverse:用于控制排序方式。默认值为False,表示升序;设置为True表示降序。

        使用方法如下:

        #升序排序
        l1 = [4,2,1,3]
        l1.sort()		# 当sort()参数都是默认时,是对列表元素自身的值进行升序排序
        print(l1)
        

        示例输出:

        [1, 2, 3, 4]

        # 降序排序
        l1 = [4,2,1,3]
        l1.sort(reverse=True)
        print(l1)
        

        示例输出:

        [4, 3, 2, 1]

        # 指定排序规则
        l1 = ['aaaaa', 'aa', 'aaaa', 'a']
        l1.sort(key=len)
        print(l1)
        

        示例输出:

        [‘a’, ‘aa’, ‘aaaa’, ‘aaaaa’]