1

我需要有关此方法 minimumFactor 的帮助

public static int smallestFactor(int C) 此函数将整数 C 作为其参数,它返回除 1 以外的 C 的因子的最小整数。

参数: 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 回答