求最大公约数的方法

常用方法:
辗转相除法:
  • 将两个数中较大的数放在a中,较小者放在b中,
    • 求temp=a%b
    • 判断temp是否为0
      • 为0,则b为最大公约数,
      • 不为0,b赋值给a,temp赋值给b,
      • 循环上述步骤,直到temp=0,则此时的b为最大公约数
        # Java
        public
        class maxCommonDivisor { public int max_common_divisor(int a, int b) { int anew = Math.max(a, b); int bnew = Math.min(a, b); int temp = anew % bnew; while (temp != 0) { anew = bnew; bnew = temp; temp = anew % bnew; } return bnew; } }
        # Python
        def
        max_common_divisor(a, b): # num_a为较大者,num_b为a,b的较小者 num_a = max(a, b) num_b = min(a, b) temp = num_a % num_b while temp != 0: num_a = num_b num_b = temp temp = num_a % num_b return num_b

         

         
  • 穷举法
    • 两种思路
      • 第一种:从a,b的较小者开始一直到1,分别被a,b除,第一个余数都为0的数则为最大公约数
         # Java
        1
        public int max_common_divisor(int a,int b){ 2 int mcd=Math.min(a,b); 3 for (int i=b;i>0;i--){ 4 if (a%i==0 && b%i==0){ 5 mcd=i; 6 break; 7 } 8 } 9 return mcd; 10 }

         

        # Python
        1
        def max_common_divisor(a, b): 2 result = 0 3 for i in range(min(a, b), 0, -1): 4 if a % i == 0 and b % i == 0: 5 result = i 6 break 7 return result

        # 函数调用
        res = ClassTest.max_common_divisor(20, 32)
        print(res)

         

      • 第二种:设置 i 从1开始到a,b的较小者,分别被a,b除,若余数均为0,则将 i 的值赋值给公约数mcd,循环结束,则mcd就是最大公约数
        # Java
        1
        public int max_common_divisor(int a,int b){ 2 int mcd=1; 3 for (int i=1;i<=Math.min(a,b);i++){ 4 if (a%i==0 && b%i==0){ 5 mcd=i; 6 } 7 } 8 return mcd; 9 }

         

        # Python
        def
        max_common_divisor(a, b): result = 0 for i in range(1, min(a, b) + 1): if a % i == 0 and b % i == 0: result = i return result

         

  • 更相减损法
posted @ 2020-02-28 15:38  爱穿新衣服的姑凉  阅读(504)  评论(0编辑  收藏  举报