解法一:
import java.util.Scanner;
public class win {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int gcd=1;
int r;
while(b>0)
{
r=a%b;
a=b;
b=r;
}
System.out.println(a);
}
}
解法二:
import org.junit.Test;
/**
* 求两个数的最大公约数,,最小公倍数LCM(m,n) = m*n - GCD(m,n)
* @author Administrator
*
*/
public class GCD {
//GCD递归求法
public int getGCD01(int m , int n) {
// int a = Math.max(m, n);
// int b = Math.min(m, n);
// m = a;
// n = b;
// if ( m % n == 0)
// return n;
// else{
// int temp = m % n;//除数
// m = n;
// getGCD01(m,temp);
// }
// return b;
return m>=n?m%n==0?n:getGCD01(n,m%n):n%m==0?m:getGCD01(m,n%m);
}
//GCD递推求法
public int getGCD02(int m , int n){
int r = 0;//余数
int max = Math.max(m, n);
int min = Math.min(m, n);
while(max % min != 0) {
r = max % min;
max = min;
min = r;
}
return min;
}
//LCM
public int getLCM(int m , int n){
int gcd = getGCD01(m,n);
int lcm = m*n/gcd;
return lcm;
}
@Test
public void testGCD01(){
System.out.println( getGCD01(100,44) );
System.out.println( getGCD01(100,44) );
}
@Test
public void testGCD02(){
System.out.println( getGCD02(100,44) );
System.out.println( getGCD02(44,100) );
}
@Test
public void testLCM(){
System.out.println( getLCM(100,44) );
}
}