首页 > 试题广场 >

求最小公倍数

[编程题]求最小公倍数
  • 热度指数:19638 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
编写一个方法,该方法的返回值是两个不大于100的正整数的最小公倍数

输入描述:
两个int类型变量作为方法的参数


输出描述:
int类型的变量,值为两个数的最小公倍数
示例1

输入

3 7

输出

21
// 辗转相除找最大公约数,然后x * y / 最大公约数就是最小公倍数
public static int getCM(int m, int n) {
    return m * n / gcd(m, n);
}

public static int gcd(int m, int n) {
    if (n == 0) return m;
    return gcd(n, m % n);
}

发表于 2021-12-08 12:21:16 回复(8)
        //write your code here......
        int i = m>n?m:n;
        for(;i%m!=0||i%n!=0;i++){
        }
            return i;

发表于 2022-03-05 15:52:16 回复(1)
    
用比较基础的办法解决了这个问题,定义i=1是避免了0取余任何数为0,解题思路就是不知道要执行多少次,便用了while里面嵌套if
public static int getCM(int m, int n){

        //write your code here......
        int i=1;
        while(true){
            if(i%m==0&&i%n==0){
                break;
            }
            i++;
        }
        return i;
        

    }
}
发表于 2022-04-23 13:22:15 回复(1)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int m = console.nextInt();
        int n = console.nextInt();
        int result = getCM(m, n);
        System.out.println(result);
    }

    public static int getCM(int m, int n){
        return m*n/gcd(m,n);
    }
    
    public static int gcd(int m,int n){
        if (n==0) return m;
        return gcd(n,m%n);
    }
}

发表于 2023-11-03 21:12:23 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int m = in.nextInt();
        int n = in.nextInt();
        System.out.println(getCM(m,n));
    }

    public static int getCM(int m,int n){
        return m*n/gcd(m,n);
    }
     
    public static int gcd(int m,int n){
        if(n==0) return m;
        return gcd(n,m%n);
    }
}

发表于 2023-01-14 19:32:01 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int m = console.nextInt();
        int n = console.nextInt();
        int result = getCM(m, n);
        System.out.println(result);
    }

    public static int getCM(int m, int n) {

        //write your code here......
        return (m * n) / gcd(m, n);

    }

    public static int gcd(int m, int n) {

        while (true) { //用大数减去小数并将结果保存起来
            if (m > n) {
                m -= n;
            } else if (m < n) {
                n -= m;
            } else { //如果两个数相等时,则这个数就是最大公约数
                return m;
            }
        }

    }

两个数的乘积等于这两个数的最大公约数与最小公倍数的积.求出最大公约数.最小公倍数迎刃而解.
发表于 2023-01-10 09:25:27 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int m = console.nextInt();
        int n = console.nextInt();
        int result = getCM(m, n);
        System.out.println(result);
    }

    public static int getCM(int m, int n){

        //write your code here......
//         最小公倍数=n*m/最大公约数
        return n*m/gcd(m,n);

    }
    public static int gcd(int m, int n){
        if(n==0)return m;
        return gcd(n,m%n);
    }
}
//用这个来理解上面的递归
// 1997 / 615 = 3 (余 152)
// 615 / 152 = 4(余7)
// 152 / 7 = 21(余5)
// 7 / 5 = 1 (余2)
// 5 / 2 = 2 (余1)
// 2 / 1 = 2 (余0)

发表于 2022-06-08 01:30:31 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        System.out.println(getCM(console.nextInt(), console.nextInt()));
        console.close();
    }
    //最小公倍数等于两数之积除以最大公约数
    public static int getCM(int m, int n) {
        return (m * n) / getCD(m, n) ;
    }
    //欧几里得算法又称辗转相除法:
    //两数相除,以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数
    public static int getCD(int m, int n) {
        if (n == 0)
            return m;
        else
            return getCD(n, m % n);//辗转相除除尽时,最后一个除数就是最大公约数
    }
}

发表于 2022-05-17 11:43:37 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int m = console.nextInt();
        int n = console.nextInt();
        int result = getCM(m, n);
        System.out.println(result);
    }

    public static int getCM(int m, int n){
        int count=0;
        for(int i=0;i<n*m;i++){
            count++;
            if(count%n==0&&count%m==0){
                break;
            }
        }
        return count;
    }
}
发表于 2024-04-24 21:39:42 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int m = console.nextInt();
        int n = console.nextInt();
        int result = getCM(m, n);
        System.out.println(result);
    }

    public static int getCM(int m, int n) {

        //write your code here......
        if (m % n == 0) {
            return m;
        } else if (n % m == 0) {
            return n;
        }
        if (m > n) {
            int temp = m;
            m = n;
            n = temp;
        }
        for (int i = n;; i += n) {
            if (i % m == 0) {
                return i;
            }
        }

    }
}

发表于 2024-03-18 11:52:40 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int m = console.nextInt();
        int n = console.nextInt();
        int result = getCM(m, n);
        System.out.println(result);
    }

    public static int getCM(int m, int n){

        //write your code here......
        return m*n/gcd(m,n);

    }
    public static int  gcd(int m,int n){
        if(m%n==0){
            return n;
        }else{
            return gcd(n,m%n);
        }
    }
}

发表于 2023-11-17 17:01:39 回复(0)
//用累加法,相当于一直加到能整除为止。
public static int getCM(int m, int n){
        //write your code here......
        for(int i=m;;i+=m){
            if(i%n==0){
                return i;
            }
        }
    }

发表于 2023-10-04 22:04:05 回复(0)
    public static int getCM(int m, int n){

        //write your code here......
        if(m<n) m=(m+n) - (n=m);
        int result=m;
        while(result%n != 0){
            result += m;
        }
       
        return result;

    }
发表于 2023-09-22 07:17:20 回复(1)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int m = console.nextInt();
        int n = console.nextInt();
        int result = getCM(m, n);
        System.out.println(result);
    }

    public static int getCM(int m, int n) {

        //write your code here......
        int max = Math.max(m, n);
        int lcm = max;

        while (true) {
            if (lcm % m == 0 && lcm % n == 0) {
                break;
            }
            lcm += max;
        }

        return lcm;
    }
}
发表于 2023-08-09 13:40:27 回复(0)
int save_m = m; int save_n =n;
        for(;m!=n;)
        {
            if(m>n)
            {
                n=n+save_n;
            }
            else if(n>m)
            {
                m=m+save_m;
            }

        }
        return m; //较小的数增加自己原本的值直到两数相等

发表于 2023-07-13 19:49:38 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int m = console.nextInt();
        int n = console.nextInt();
        int result = getCM(m, n);
        System.out.println(result);
    }

    public static int getCM(int m, int n) {
        //write your code here......
        for (int i = m ; i <= m * n; i++) {
            if ( i % m == 0 && i % n == 0) {
                return i ;
            }
        }
        return 0;
    }
}

发表于 2023-03-28 16:06:54 回复(0)
public static int getCM(int m, int n){
        //write your code here......
        int re = 0;
        for(int i=m*n;i>0;i--){
            if(i%m==0&&i%n==0){
                re = i;
            }
        }
        return re;
    }
发表于 2023-03-18 17:08:12 回复(0)
 public static int getCM(int m, int n){

        //write your code here......
        return m * n / gcd(m, n);

    }

    public static int gcd(int m, int n){
        return n == 0 ? m : gcd(n, m % n);
    }

发表于 2023-01-07 22:22:25 回复(0)
循环每次用最大的那个数的倍数来除以小的那位数,直至求余结果为0就可以了,这样循环的次数应该是最少的
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int b = in.nextInt();
        int c = test(a,b);
        System.out.println(c);
    }
    public static int test(int i,int j){
        int a = i>j?i:j;
        int b = i>j?j:i;
        int c = 0;
        int d = 1;
        int e = 0;
        while(true){
            c = a*d;
            d = d+1;
            if(c%b==0) {
                e = c;
                break;
            }
        }
        return e;
    }
}

发表于 2022-11-24 10:34:40 回复(0)
辗转相除法改成最大公约数,再用最大公约数与最小公倍数的关系
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
      public static void main(String[] args) {
        //编写一个方法,该方法的返回值是两个不大于100的正整数的最小公倍数
        //求最大公约数
        Scanner in = new Scanner(System.in);
        int x=in.nextInt();
        int y=in.nextInt();
        //辗转相除法
        int a=x;
        int b=y;
        int c=0;
        while (x%y>0) {
            c=x%y;
            x=y;
            y=c;
        }
        System.out.println(a*b/y);
    }
}

发表于 2022-11-23 18:30:00 回复(0)

问题信息

难度:
42条回答 738浏览

热门推荐

通过挑战的用户

查看代码