ikemonn's blog

技術ネタをちょこちょこと

【TopCoder】SRM 162 DIV2 Lv.1

問題文概略

与えられた2つの数字の間の数全ての最小公倍数を求める。

書いたコード

public class LCMRange {

    public int lcm(int first, int last) {

        int max = 1;
        boolean flag = false;
        int ans = 0;
        //maxを出す
        for(int i = first; i <= last; i++) {
            max *= i;
        }
        //last~maxまで1つずつ調べる
        for(int j = last; j <= max; j++) {
            if(flag == true) {
                break;
            }
            for(int k = first; k <= last; k++) {
                //first~lastのそれぞれの数で割り切れるか判定
                if(j % k != 0) {
                    break;
                }
                //first~lastまで全ての数で割り切れたらそれが答え
                if(k == last) {
                    flag = true;
                    ans = j;
                }
            }
        }
        return ans;
    }
}

他の参加者のコードを読んで修正した

public class LCMRange {

    public int lcm(int first, int last) {
        for(int i = 1; ; i++) {
            boolean flag = true;
            for(int j = first; j <= last; j++) {
                if(i % j != 0) {
                    flag = false;
                    break;
                }
            }
            if(flag) return i;
        }
    }
}

雑感

for文で無限ループを回すには第二引数をtrueか空にすればよいのか。