2012-09-14 62 views
1

我需要用這種方法 smallestFactor找到是C因子的最小整數?

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; 
    } 
} 

我需要找到最小的因子 ,但我不知道該怎麼辦呢

+0

您打印是它的第一個我。 – njzk2

+0

此功能以升序排列權打印所有因素。所以,只需在打印之後添加一個'break'語句即可。 – Balanivash

回答

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; 
} 

還有其他一些可以改進的地方,但是應該讓你開始。

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; 
    } 
} 
+0

返回'-1'不正確,'C'總是自分。 – verdesmarald

+0

我站好了 – AJcodez

0

你需要返回的值是你的i,不C

您應該通過循環中的ireturn可能的值,當您發現C % i == 0時值。

請注意,爲了提高效率,您應該測試2,3,然後測試每個奇數。有(4,6,8,...)如果你已經測試了2沒有點測試:

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 
} 

其實最有效的算法將只對因素考驗,但我懷疑這是超出範圍你被問過什麼。

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. 
}