Java机试题:求最大公约数(两种方法,欧几里得与直接遍历)

思路一:求最大公约数,从1遍历大的,找出能最大的能整除这俩数的,即是最大公约数

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       while(sc.hasNextLine()){
          String[] str = sc.nextLine().split(" ");
          int m = Integer.valueOf(str[1]);
          int n = Integer.valueOf(str[0]);
          // 求最大公约数,从1遍历大的,找出能最大的能整除这俩数的,即是最大公约数。
          int max = m > n ? m : n;
          int min = m > n ? n : m;
          int maxDivisor = 1;
           for (int i = 1; i <= max; i++) {
               if(max % i ==0 && min % i == 0){
                   if(maxDivisor < i){
                       maxDivisor = i;
                   }
               }
           }
           System.out.println(maxDivisor);
       }
    }
}

思路二:欧几里得算法(辗转相除法): gcd(a, b) = gcd(b, a%b) ,gcd(a, b) 表示最大公约数

// 递归到余数为0,求最大公约数。即:欧几里德算法停止的状态是: 参数a = gcd , b = 0
public static int gcd(int a,int b) {
        return  b == 0 ? a : gcd(b, a % b);
}

 题目来源:牛客网

posted @ 2022-01-01 12:33  对月当歌  阅读(99)  评论(0)    收藏  举报