Можно ли узнать, насколько большим будет факториал, прежде чем его вычислять? - PullRequest
3 голосов
/ 11 июля 2009

Я использую GMP для расчета очень больших факториалов (например, 234234!). Есть ли какой-нибудь способ узнать, до какого вычисления будет сколько цифр будет (или может быть) результат?

Ответы [ 6 ]

12 голосов
/ 11 июля 2009

Вы можете преобразовать аппроксимацию Стирлинга формулу, используя простую логарифмическую математику, чтобы получить количество цифр:

n!         ~ sqr(2*pi*n) * (n/e)^n
log10(n!)  ~ log10(2*pi*n)/2 + n*log10(n/e)

Для этого достаточно математики с плавающей запятой, что делает его молниеносным.

7 голосов
/ 11 июля 2009

Логарифм факториала можно использовать для вычисления количества цифр, которое примет число факториала:

logn!

Это можно легко перевести в алгоритмическую форму:

//Pseudo-code
function factorialDigits (n) 
  var result = 0;

  for(i = 1; i<=n; i++)
    result += log10(n);

  return result;
3 голосов
/ 11 июля 2009

Приближение Стирлинга дает приближение размера n!

alt text

См. Страницу Википедии для деривации.

2 голосов
/ 11 июля 2009

это будет

nlog(n) - n + log(n(1 + 4n(1 + 2n)))/6 + log(pi)/2

см. Тему "Темпы роста" @ http://en.wikipedia.org/wiki/Factorial Шриниваса Рамануджан метод

1 голос
/ 11 июля 2009

Около четырех человек упомянули о Стирлинге, так что ... другой вариант - это LUT, хранящий количество цифр для каждого из первых N факториалов. Предполагая 4 байта для целого числа и 4 байта для количества цифр, вы можете хранить первые 1 000 000 факториалов примерно в 8 МБ.

1 голос
/ 11 июля 2009

Да, см. Приближение Стирлинга

Это говорит п! ~ = sqrt (2 * Pi n) (n / e) ^ n. Чтобы получить количество цифр, возьмите 1 + log (n!) / Log (10).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...