Проверьте эту статью (PDF-ссылку) Ричарда Фейтмана. Примеры кода находятся на Лиспе, но, в любом случае, большая часть секрета сводится к минимизации количества вычислений bignum (произвольное значение точности), которые вам необходимо выполнить.
Естественно, если вам не нужны / есть бигнумы, это тривиально; подойдет либо таблица поиска, либо простой цикл.
РЕДАКТИРОВАТЬ: Если вы можете использовать приблизительный ответ, вы можете либо вычислить логарифм факториала непосредственно, суммируя log(k)
для k = 2 ... n
, или используя почтенный приближение Стирлинга . Вы хотите работать с логарифмом везде, где это возможно, чтобы избежать переполнения; в частности, наивное применение приближения Стирлинга будет переполнено во многих местах, где это не обязательно.