0

このループについて助けが必要です。私のコースの課題の 1 つは、LCM プログラムを作成することです。

Sample output:
(8,12) LCM is 24
(4,3) LCM is 12
(5,10,20) LCM is 20
(18,24,52) LCM is 936
(12,10,26) LCM is 780
(99,63,24) LCM is 5544
(62,16,24) LCM is 1488

これまでのところ2つの数字でこれを持っていますが、3つの数字を行う方法がわかりません。他のクラスでメソッドを使用することになっているので、これが LCM クラス用のものです。

public class LCM {
    private int n, x, s = 1, t = 1;

    public LCM()
    {
        n = 0;
        x = 0;
        s = 1;
        t = 1;
    }
    public int lcmFind(int i, int y) {
        for (n = 1;; n++) {
            s = i * n;
            for (x = 1; t < s; x++) {
                t = y * x;
            }
            if (s == t)
                break;
        }
        return (s);
    }
}
4

8 に答える 8

2

3 つ以上の数字の LCM を取得する場合はlcmFind、次の方法でメソッドを使用できます。

int a = 2;
int b = 3;
int c = 5;
LCM l = new LCM();
int lcm = l.lcmFind(l.lcmFind(a, b), c);

推奨事項:

  • nxsおよび変数をtでローカルにしlcmFindます。メソッドでのみ必要でlcmFindあり、 を呼び出すたびに値をリセットする必要があるためですlcmFind
  • メソッドをlcmFind静的にします。lcm を計算するために新しいオブジェクトをインスタンス化する必要はありません。このようにして、 のように使用したりLCM.lcmFind(3,4)、メソッドの名前を変更して のようなものを使用したりすることができますLCM.find(3,4)

編集
可変数の引数をとるメソッドを作成する必要がある場合は、varargsをチェックする必要があります。したがって、次のようなものが得られます。

public int lcmFind(int.. args) {
    // args is actually array of ints.
    // calculate lcm of all values in array.
    // usage: lcmFind(1,4) or lcmFind(1,5,6,3)
}

lcmFind2 つの引数を取るの最初のバージョンを使用して、それを使用して多くの値の lcm を計算できます。

EDIT 2
の 2 および 3 引数バージョンのみが必要な場合は、3 引数バージョンをlcmFind追加するだけです。

public int lcmFind(int a, int b, int c) {
    return lcmFind(lcmFind(a, b), c); 
}
于 2013-01-29T15:20:20.023 に答える
1
public static int gcd(int a, int b){
    return (b == 0) ? a : gcd(b, a % b);
}

public static int gcd(int... args){
    int r = args[0];
    int i = 0;
    while(i < args.length - 1)
        r = gcd(r,args[++i]);
    return r;
}

public static int lcm(int a, int b){
    return a * b / gcd(a,b);
}

public static int lcm(int... args){
    int r = args[0];
    int i = 0;
    while(i < args.length - 1)
        r = lcm(r,args[++i]);
    return r;
}
于 2018-11-30T00:11:13.940 に答える
1

試す

public int lcm(int... a) {
    for (int m = 1;; m++) {
        int n = a.length;
        for (int i : a) {
            if (m % i != 0) {
                break;
            }
            if (--n == 0) {
                return m;
            }
        }
    }
}
于 2013-01-29T15:31:29.953 に答える
0
static int  getLCM(int a,int b)
{
    int x;
    int y;
    if(a<b)
    {
        x=a;
         y=b;   
    }
    else
    {
         x=b;
         y=a;   
    }
    int i=1;
    while(true)
    {

        int x1=x*i;
        int y1=y*i;
        for(int j=1;j<=i;j++)
        {
        if(x1==y*j)
        {
            return x1;
        }
        }

        i++;
    }



}
于 2013-11-21T13:27:03.660 に答える
0

古い投稿なので、すでに答えがあると思います。まだ私の答えを投稿しています。以下は、配列の LCM を見つけるためのコードです。

 import java.util.Arrays;
 import java.util.Scanner;

public class ArrayEqualAmz {
    static int lcm =1;
    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int [] arr = new int[n];

    for(int i=0; i<n; i++){
        arr[i] = sc.nextInt();
    }
    System.out.println("lcm = "+lcm(arr));

    }

    // find the factor
    public static int divisor(int x[]){
        Arrays.sort(x);
        int num=0;
        for(int i=x.length-1; i>=0; i--){
            if(x[i] != 1 )
            num=x[i];
        }
        for(int j=2; j<=num; j++){
            if(num%j==0){
            return j;}
        }
        return num;
    }

    //finding the lcm
    public static int lcm(int arr[]){
        while(true){

        int j = divisor(arr);
        if(j==0){break;}
        lcm = lcm*j;
        for(int i=0; i<arr.length; i++){
            if(arr[i]%j==0){
            arr[i] = arr[i]/j;}
        System.out.print(arr[i]+",");
        }
        System.out.println( " factor= "+lcm);
        return lcm(arr);
        }
        return lcm;
    }


}
于 2016-08-03T17:20:10.430 に答える