2012-03-01 18 views
1

如果數字是質數或非質數,則此方法返回true或false。問題是它顯示9,25和49作爲素數。我該如何解決它?如何修復列出9,25和49作爲素數的算法

public static bool IsItPrime(int prime) 
{ 
    if (prime == 2) 
     return true; 
    else if (prime < 2 || prime % 2 == 0) 
     return false; 
    else 
    { 
     int limit = (int)Math.Sqrt(prime); 
     for (int i = 2; i < limit; i++) 
     { 
      if (prime % i == 0) 
       return false;      
     } 
    } 
    return true; 
} 
+0

if(limit * limit == prime)return false; – Jason 2012-03-01 13:47:05

+2

如果這裏有一些答案適用於您,您應該「接受」它,即單擊旁邊的大綠色空白複選標記。 – 2012-03-01 23:06:25

回答

6

更改內部循環,從

for (int i = 2; i < limit; i++) 

for (int i = 2; i <= limit; i++) 

所有你錯過的值對應的奇數的平方 - 3,5,7等,如果你拿(int)Math.Sqrt(prime)作爲限制,那麼你也應該檢查這個限制包含。

+0

謝謝你的工作:* – 2012-03-01 13:48:32

+3

+1這應該是顯而易見的,因爲數字被錯誤地報告爲主要! – 2012-03-01 13:49:05

3

在循環中使用<=而不是<。不正確的數字是正方形,唯一的其他因素是平方根 - 但與<,你永遠不會達到它。

+0

謝謝你的作品 – 2012-03-01 13:49:32