2012-03-10 66 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