与えられた整数の因数を求める

こんな感じのが落ちてる。

int f = 120;
for(int ff = 1; ff <= f; ff++){
    while (f % ff != 0){            
}

因子を求めるループに何か問題があるのでしょうか?for文とwhile文の仕組みがよくわからないので、完全に間違っている可能性があります。

この後、前記因子に変数を代入するにはどうすればよいのでしょうか?

しかし、「while&log」ループを使うのは間違っています。 あなたの for ループのロジックは、次のとおりです。

  • コード>ffを1に設定します。
  • そのまま ff fffの係数である限り、あなたがそこに書いたどんなコードも実行し続けるので、あなたがコード>whileでそれらを変えない限り、無限ループになってしまうのです。 しかし、これを if の文に変更すると、望みのものが得られます。

因子を調べているのですから、実際にはfまでのすべての可能性を調べる必要はなく、fの平方根までの可能性を調べればよいのです。

解説 (0)

whileループの中でfffのどちらかを使って何かをしようとしているわけではないようですね?もしそうなら、f%ff != 0 という式は偽か(そうするとforループの次に行く)、真で、無限ループに陥ってしまうことになります。

本当にこのようなwhileが必要なのでしょうか?

解説 (0)

少し修正した解答です。変数xが変数yで割り切れるかどうかをまず確認し、割り切れる場合は1をカウントし、この処理を繰り返します。ループカウンタにはx/yを使用し、xが0になったがまだループが終了していない場合の繰り返しを避けるため、x>0をチェックする必要があります。

   public class Factor {

    public static void main(String[] args) {

        int x = 48;
        int x1 = x;
        int y = 2;
        int k = x / y;
        int j = 0;
        for (int i = 1; i < k; i++) {
            if ((x % y) == 0 && x > 0)
                j++;
            x = x / 2;
        }
        System.out.println(+x1 + " is a factor of " + y + " for " + j
                + " times.");

    }
}
解説 (0)