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); }
题目来源:牛客网
浙公网安备 33010602011771号