1

このメソッドの助けが必要です

public static int smallestFactor(int C) この関数は引数として整数 C を取り、C の約数である 1 以外の最小の整数を返します。

パラメータ: C - 因数分解する整数。

前提条件: C は 1 より大きい必要があります。

戻り値: C の最小因数。

public class Factor
{       
public static long smallestFactor(int C)
    {   
    for (int i = 2; i*i<= C; i++) 
    {   
        while (C % i == 0) 
        {
         System.out.print(i + " "); 
         C = C / i;
        }
    }
        return C;
    }
}

最小の係数を見つける必要がありますが、その方法がわかりません

4

4 に答える 4

5

ifの代わりに使用する必要があり、見つかった場合はwhile戻る必要があります。i

public static long smallestFactor(int C)
{
    for (int i = 2; i*i<= C; i++) 
    {   
        if (C % i == 0)
        {
            return i;
        }
    }

    return C;
}

他にも改善できる点はありますが、まずはそれから始めてください。

于 2012-09-14T07:20:59.867 に答える
0

コードへの小さな変更 - あなたは近くにいました!

public class Factor {

    public static long smallestFactor(int C) {

        for (int i = 2; i*i<= C; i++) {   
            if (C % i == 0) return i;
        }
        return -1;
    }
}
于 2012-09-14T07:21:22.647 に答える
0

返す必要がある値は、iではなく、あなたのものCです。

iループ内での可能な値を処理する必要がありreturnますC % i == 0

効率のために、2、3、およびその後のすべての奇数をテストする必要があることに注意してください。すでに 2 をテストしている場合、ポイント テスト (4、6、8、...) はありません。

public static int smallestFactor(int C) {
    if (C % 2 == 0) return 2;  // C is even

    for (int i = 3; i * i <= C; i += 2) {
        if (C % i == 0) return i;  // odd factor found
    }

    return C;  // no factor found
}

実際、最も効率的なアルゴリズムは素因数のみをテストしますが、それはあなたが尋ねられたことの範囲を超えていると思います.

于 2012-09-14T07:21:44.830 に答える
0

すべての例外的なケースを処理するには、次のコードを試してください。

public static long smallestFactor(int x)
{
    if(x < 1)  return -1;
    if(x == 1) return  1;

    for(int i=2; i<=x; i++)
       if(x % i == 0) 
          return i;

    return -1; // To stop compiler's complaints.
}
于 2012-09-14T07:24:13.440 に答える