Pergunta

Eu estou usando GMP para calcular muito grandes fatoriais (por exemplo, 234234!). Existe alguma maneira de saber, antes que se faz o cálculo, quantos dígitos o resultado será (ou pode) ser?

Foi útil?

Solução

O logaritmo da factorial pode ser usado para calcular o número de dígitos que o número factorial terá:

log n!

Isto pode ser facilmente traduzida para uma forma algorítmica:

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

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

  return result;

Outras dicas

seria

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

consulte o tópico "taxa de crescimento" @ http://en.wikipedia.org/wiki/Factorial método Srinivasa Ramanujan

Sim, veja Stirling aproximação

Ele diz que n! ~ = Sqrt (2 * pi n) (n / e) ^ n. Para obter o número de dígitos, tome 1 + log (n!) / Log (10).

Bem cerca de quatro pessoas mencionaram Stirling então ... outra opção é um LUT armazenar o número de dígitos para cada um dos primeiros fatoriais N. Assumindo 4 bytes para o número inteiro e 4 bytes para o número de dígitos, você pode armazenar os primeiros 1.000.000 fatoriais em torno de 8MB.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top