import   java.util.Scanner;   
public   class   CandC   
{   
public   static   int   gcd(int   m,   int   n)   
{   
while   (true)   
{   
if   ((m   =   m   %   n)   ==   0)   
return   n;   
if   ((n   =   n   %   m)   ==   0)   
return   m;   
}   
}   
public   static   void   main(String   args[])   throws   Exception   
{   
//Scanner   chin   =   new   Scanner(System.in);   
//int   a   =   chin.nextInt(),   b   =   chin.nextInt();   
int   a=24;   int   b=32; 
int   c   =   gcd(a,   b);   
System.out.println( "最小公倍数: "   +   a   *   b   /   c   +   "\n最大公约数: "   +   c);   
}   

怎么就求出最大公约数了呢  gcd方法里面怎么运行的,求详解

解决方案 »

  1.   

    辗转相除法我知道...可是里面没有用到啊...
    while (true)   
    {   
    if ((m = m % n) == 0)   
    return n;   
    if ((n = n % m) == 0)   
    return m;   
    }  余数都是为0的,没有看到除不尽的
      

  2.   

    它执行的就是gcd(a,b%a)这个,虽然代码里看不到这个,但是在算法中,他就有这个方法的使用。
      

  3.   

    那个算法是这样的:给两个数,假如m>n,令r=m%n。如果r不等于0,(1)令m=n,n=r,r=m%n。如果r=0,则n就是最大公约数,如果r不等于0,转(1)。直到r=0,此时的n就是最大公约数。明白?
      

  4.   

    import java.util.Scanner; 
    public class CandC   
    {   
    public static int gcd(int m, int n)   
    {   
    int r;
    while (true)   
    {   
    r=m%n;
    if(r==0)return n;
    else
    m=n;n=r;
    }   
    }   
    public static void main(String args[]) throws Exception   
    {   
    //Scanner chin = new Scanner(System.in);   
    //int a = chin.nextInt(), b = chin.nextInt();   
    int a=24; int b=32;  
    int c = gcd(a, b);   
    System.out.println( "最小公倍数: " + a * b / c + "\n最大公约数: " + c);   
    }   
    }  
    看一下这个程序,你就明白了。算法见9楼
      

  5.   

    这就不是java问题了这应该是数学问题吧
      

  6.   

    public class Gcd {
    public static int gcd(int x,int y){
    if(x==0){
    return y;
    }
    if(y==0){
    return x;
    }
    if(x<y){
    return gcd(y%x,x);
    }
    return gcd(y,x%y);
    }
    }