Основываясь на примере, используемом в этом факторном определении , вы можете использовать div()
для более быстрого определения коэффициентов.Вы можете реализовать это как
div_t result;
while (n != 0) {
result = div(n, i);
n = result.quot;
maxFact[i++] = result.rem;
}
Где div()
и div_t
включены из stdlib.h
.
Это довольно похоже на то, что у вас есть, за исключением того, что maxFact
теперь явно хранит коэффициенты и требует только один цикл для вычислений.Ваш код выглядит так, как будто он, по крайней мере, близок к O (log n), но, выполняя это, как показано выше, уменьшает количество флопов / n, в то же время алгоритмически O (log n) - немного более эффективно, но не превосходно по алгоритму.На самом деле код в этом ответе выполняется в среднем в 3 раза быстрее, чем код в вопросе, для n
больше 10 - но здесь мы делим микросекунды (даже до предела точности n
), поэтому коэффициент 3 равенпрактически бессмысленно.
Надеюсь, это поможет