dポイントプレゼントキャンペーン実施中!

Java初心者です。
最小公倍数を求めるプログラムを作っているのですが、そこで使っているfor文がなぜか無いもののように認識されてしまっています。(試しにforで変数(M)に掛ける数を2とかにしてみたのですが、System.out.printで出される値が初期値のままだったことで気づきました)
色々試していたのでプログラムはかなり無茶苦茶になってしまっています。
ずっと悩んでるのですがどうしてもわからず、質問させていただきました。
質問の内容が分かりにくく、申し訳ありません。よろしくお願いします。


import java.util.Scanner;

public class LCM_GCD {
public static void main(String[] args) {

Scanner sc =new Scanner(System.in);

int M= sc.nextInt();
int N=sc.nextInt();//ここまでは確実に動いている。M,Nの判定もできている

for(int i=1;M<=i;i++) {
for(int z=1;M==z;z++) { //ここでtwoがoneを超えるまでループする
N=N*z;
if(M<N||M>N) { //もしもMがNより大きい、もしくは小さかった場合break
z++;
break;
}
}
M=M*i;
}
System.out.println("最小公倍数は"+M);

}

}

質問者からの補足コメント

  • 途中、コメント文にtwoとoneと言う宣言されていない変数が出ていますが、twoとoneと書くのが煩わしく感じてしまい「M」と「N」に変更してしまい、その際に変更し忘れたものです。
    また、回答者リクエストに20歳以下にチェックを入れてしまったのですが、ただの間違えです。
    ややこしくしてしまい申し訳ございません。

      補足日時:2021/05/27 22:02

A 回答 (3件)

for(int i=1;M<=i;i++)


がどういう動作をするか, 日本語で書いてみよう.
    • good
    • 0

import java.util.Scanner;



public class LCM_GCD {
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);

  Long M = sc.nextLong();
  Long N = sc.nextLong();

  System.out.println("最小公倍数は" + Lcm(M, N));
 }
 static Long Lcm(Long M, Long N) {
  return M / Gcd(M, N) * N;
 }
 static Long Gcd(Long M, Long N) {
  if (N == 0) {
   return M;
  } else {
   return Gcd(N, M % N);
  }
 }
}
    • good
    • 0

最小公倍数は、ワンライナー



static int gcd (int x,int y) {return y>0?gcd(y,x%y):x;}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!