2012-03-10 3 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. Эта функция возвращает значение true, если конкретный nCr делится на число p. Пусть это будет оптимизировано дальше.Может ли это быть дополнительно оптимизировано

+0

Хотя это не оптимизация, а 'а> Ь + c' уже возвращаются, что ваш метод должен возвращать, так что вы можете просто сделать' return a> b + c' –

+0

Я хотел бы добавить еще одну вещь здесь ... вы не должны использовать double для выполнения своих вычислений, а вместо этого используйте десятичный тип. Десятичные будут точно определять ваши результаты. Также правильно объявляйте свои переменные - double a = 0.0m; – Dinesh

+0

@ DnshPly9 Я не думаю, что переключение на 'decimal' будет оптимизацией. – Marlon

ответ

4

Являются ли ваши входы постоянными целыми числами? Если это так, то вы можете повысить производительность, используя int вместо double и используя целочисленное деление вместо деления с плавающей запятой. Тогда вам также не нужно будет звонить Math.Floor, поскольку целочисленное деление автоматически обрезает результат для вас.

Вы также можете упростить последнюю строку только это:

return a > b + c; 
+0

ok..done that.Can будет оптимизирован дальше. Или, скорее, любой другой способ написания этого кода, чтобы он работал быстрее – Jay

Смежные вопросы