我需要这方法的帮助 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;
}
}
我需要找到最小的因子 但我不知道该怎么做
答案 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
的可能值,并在找到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
}
事实上,最有效的算法只会测试 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.
}