【JAVA】浅析---辗转相除法

//辗转相除法求最大公因数和最小公倍数

import java.util.*;

publicclass Demo1{

     publicstaticvoid main(String[]args) {

      Scanner sc = new Scanner(System.in);

      int a =sc.nextInt();

      int b =sc.nextInt();

      System.out.println(max_num(a,b));//调用方法,最大公因数

      System.out.println(min_num(a,b));//调用方法,最小公倍数

     }

 

     privatestaticint max_num(int a, int b) {

      int max,min;

      max=(a>b)?a:b;

      min=(a<b)?a:b;//判断maxmin

     

      if(max%min!=0){

//        int a=max%min;求大数除以小数的余数

       return max_num(min,max%min);

      }

       else

        return min;

      //最后余数为0,则除数(小数)是解

     

     }

     //假设xy的最大公约数是m,最小公倍数是n,xy=mn

     privatestaticint min_num(int a, int b) {

        

      return a*b/max_num(a,b);

     }

 

    }

N个数的最小公倍数

方法一:辗转相除法求最大公因数和最小公倍数

import java.util.*;

publicclassdemo1{

   publicstaticvoid main(String[] args) {

      Scannersc = newScanner(System.in);

      while(sc.hasNext()){

         int n=sc.nextInt();

         int a[]=newint[n];     

         int v=1;

         for(int i=0;i<n;i++){

            a[i]=sc.nextInt();

         }

         for( int i=0;i<n;i++){     

            v=min_num(v,a[i]);

         }

         System.out.println(v);

      }

   }

 

   privatestaticint max_num(int a, int b) {

      int max,min;

      max=(a>b)?a:b;

      min=(a<b)?a:b;//判断maxmin

 

      if(max%min!=0){

         //      int a=max%min;求大数除以小数的余数

         return max_num(min,max%min);

      }

      else

         return min;

      //最后余数为0,则除数(小数)是解

 

   }

   //假设xy的最大公约数是m,最小公倍数是n,xy=mn

   privatestaticint min_num(int a, int b) {

         int c=max_num(a,b);

         int s=(a/c)*b;

      return s;

   }

}

 

 

方法二:max循环加1知道整除所有数

import java.util.*;

publicclass LCMP{

 

 

    publicstaticvoid main(String[] args) {

       // TODO Auto-generatedmethod stub

 

       Scanner scan=new Scanner(System.in);

       while(scan.hasNext()){

 

           int n=scan.nextInt();

           int a[]=newint[n];  //N个数放进数组

           int max = 0;

           for(int i=0;i<n;i++){

              a[i]=scan.nextInt();

              if(max<a[i]){

                  max=a[i];//求出最大值

 

              }

           }

           //max+1直到除以所有的数整除!

           for(int i=max;;i++){

              boolean b=true;

              for(int j=0;j<n;j++){

                  if(max%a[j]!=0){//max除以所有的数整除为真,反之;

                     b=false;

                  }

              }

              max++;

 

              if(b){

                  System.out.println(i);

 

                  break;

              }

           }

       }

    }

}

猜你喜欢

转载自blog.csdn.net/weixin_39905871/article/details/81057234