找到一个C因子的最小整数?

时间:2012-09-14 07:17:16

标签: java numbers factorization

我需要这方法的帮助 smallestFactor

public static int smallestFactor(int C) 此函数将其参数作为整数C,并返回除C之外的最小整数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 个答案:

答案 0 :(得分: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;
}

您可以进行其他改进,但这应该可以让您开始。

答案 1 :(得分: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;
    }
}

答案 2 :(得分:0)

您需要返回的值是i,而不是C

您应该在循环中处理i的可能值,并在找到returnC % 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
}

事实上,最有效的算法只会测试 prime 因子,但我怀疑这超出了你被问到的范围。

答案 3 :(得分: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.
}