参考博客:http://blog.csdn.net/jayfer/article/details/1783649
import java.util.Scanner; public class Main { private static boolean flagM; private static boolean flagN; public static void main(String[] args) { Scanner input = new Scanner(System.in); int m; int n; while(input.hasNext()) { m = input.nextInt(); n = input.nextInt(); flagM = false; flagN = false; if(n > m) { //要求m比n大 m = n + m; n = m - n; m = m - n; } dfs(m, n, 1); if(!flagM && flagN) { System.out.println(n); } else { System.out.println(m); } } input.close(); } public static void dfs(int m, int n, int k) { if(m == 1 && n == 1) { //表示可以找到两组因子来表示m 和 n flagM = true; return; } if(n == 1) { //表示n可以分解完 接着查看m是否可以分解完 flagN = true; } while((k < m || k < n) && k < 100) { k = k + 1; if(m%k == 0) { dfs(m/k, n, k); //若k是m的因子 则接着 将m/k分解 if(flagM) { //如果 m == 1 && n == 1则表明m和n找到两组因子来表示 return; } } if(n%k == 0) { dfs(m, n/k, k); if(flagM) { return; } } } } }