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 :(得分:4)
您的输入是否总是正整数?如果是这样,那么您可以使用int
代替double
并使用整数除法而不是浮点除法来提高性能。然后你也不需要调用Math.Floor
,因为整数除法会自动截断你的结果。
您还可以将最后一行简化为:
return a > b + c;