2012-03-10 64 views
1
public static bool IsDivisible(double p, double n, double r, double k) 
    { 
     double x = p; 
     double a = 0.0, b = 0.0, c = 0.0; 
     while (x <= n) 
     { 
      a += Math.Floor(n/x); 
      if (x <= r) 
       b += Math.Floor(r/x); 
      if (x <= k) 
       c += Math.Floor(k/x); 
      x *= p; 
     } 
     return a > b + c ? true : false; 
    } 

這上面的代碼檢查nCr是否可以被一個數字p.k整除n-r。 如果一個特定的nCr是一個整數p,該函數返回true。可以進一步優化。這可以進一步優化

+0

雖然它不是一種優化,'A> B + C'已返回你的方法應該返回什麼,所以你可以簡單地做'返回a> b + c' – 2012-03-10 07:45:02

+0

我想在此添加一件事...您不能使用double來完成計算,而是使用十進制類型。小數點會精確地顯示你的結果。同時正確地聲明你的變量 - double a = 0.0m; – Dinesh 2012-03-10 08:14:48

+0

@ DnshPly9我不認爲切換到'decimal'將是一個優化。 – Marlon 2012-03-10 09:57:09

回答

4

您的輸入是否總是正整數?如果是這樣,則可以使用int而不是double並使用整數除法而不是浮點除法來提高性能。那麼你也不需要撥打Math.Floor作爲整數除法自動截斷你的結果。

您還可以簡化最後一行只是這樣的:

return a > b + c; 
+0

ok..done that.Can它進一步優化。或者任何其他寫這個代碼的方式,以便它運行更快 – Jay 2012-03-10 07:56:23