【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か空にすればよいのか。