Alguém sabe como efetuar o cálculo de fatorial de 10^15 ou seja 1 quatrilhão
Fatoria 10^15
13 Respostas
Poderia explicar melhor ?
Quer saber como faz isso em java?
Utilize BigInteger no lugar de integer ou long no algoritmo padrão para factorial.
Não adianta usar BigInteger, porque o número resultante irá ser grande demais para caber na memória do computador.
Para calcular o fatorial de 10 elevado a 15, você pode usar uma fórmula fechada para o fatorial:
n! = gamma (n + 1)
Onde a função gamma pode ser obtida por uma série de potências.
Entretanto, o gamma de (10 elevado a 15 - 1) ainda é um número absurdo. Portanto, tradicionalmente calcula-se o logaritmo de gamma, e então a partir desse logaritmo obtém-se o número.
Em algum lugar você pode obter uma fórmula para calcular lngamma (esse é o nome tradicional desse método). Em http://www.wolframalpha.com eu consegui o valor de 3.353877639491070344859660248028091836261550220111412484349189019864987776782664049865578213930432314620105991… x 10^16
Ou seja, o logaritmo decimal do fatorial de 10 elevado a 15 é:
1.456570551809675607143880526014095589141601977287792123789622552066011337860639386892579938458631026120407402… x 10^16
Ou seja,
1.456570551809675607143880526014095589141601977287792123789622552066011337860639386892579938458631026120407402… x 10^16
14565705518096756 + 0.07143880526014139018589792302492271960776676818433279953615455120063589445985010851898655798
Ou seja, o fatorial de 10 elevado a 15 é
1.1787964119409006574031242336405180990631499035923776521531387239523642146128136963850208230647754957 x 10 ^ 14565705518096756.
Logo se vê que um BigDecimal não seria suficiente para conter o fatorial do número 10 elevado a 15.
OK?
Dica número 2: não adianta usar perguntar "1000000000000000! " ao Wolfram Alpha. Eu tentei isso primeiro, mas ele simplesmente se recusou a responder. Tive de fazer esses passos para obter a resposta.
Não adianta usar BigInteger, porque o número resultante irá ser grande demais para caber na memória do computador.(…)
Ou seja, o fatorial de 10 elevado a 15 é
1.1787964119409006574031242336405180990631499035923776521531387239523642146128136963850208230647754957 x 10 ^ 14565705518096756.Logo se vê que um BigDecimal não seria suficiente para conter o fatorial do número 10 elevado a 15.
Não cabe na memória do computador… Como vc calculou esse numero acima ?
Sergião, basta você acompanhar o post completo. Por favor, corrija uns cálculos que fiz errados, porque eu deveria ter usado gamma (1000000000001), não gamma (999999999999). Eu corrigi algumas coisas mas não tudo; você vai ver que o expoente do número calculado está certo, mas a mantissa não está certa a partir da 10a. casa mais ou menos.
De qualquer maneira, mesmo sem saber todas essas fórmulas, eu poderia ter uma idéia grosseira do tamanho do número pensando assim:
10^15 ! = 1 * 2 * … * (10^15 - 1) * 10^15 é menor que (10^15) elevado a (10^15).
O número de dígitos decimais de (10^15) elevado a (10^15) é 15 * (10 ^15) + 1.
Mas eu sei que um computador típico tem no máximo 10 Gb (10 ^10 bytes) de memória RAM, e cada dígito decimal requer meio byte para ser representado. Ou seja, eu precisaria de 1.500.000 computadores de 10Gb de memória cada um, só para conter o tal número.
Portanto, eu não posso tentar calcular diretamente o número, porque eu não teria nem memória (nem disco suficientes). Não sou o Google para ter 15 quatrilhões de bytes de disco.
é galera este cálculo é fóda…tem alguma maneira de quebrar o numero em tres partes ou mais?
Pessoal que está perdido, o cálculo de fatoria é n! certo
mas o que eu quero é 10^15!
Esta resposta é para quem não está entendendo ok,
Valw pela dica estou tentando efetuar o cálculo em liguagem de progrmação vlw msmo pela força
ENANTIOMERO
Dica número 3: tentei implementar as fórmulas que estão naquele artigo da Wikipedia que lhe mostrei (Fórmula de Stirling). Só que, devido à precisão do “double” (15 dígitos significativos), eu obtive um resultado um pouco inconclusivo:
1,000000 x 10 ^ 14565705518096754
Que não é bem o que eu mostrei. É necessário usar alguma outra coisa que calcule adequadamente o logaritmo para você com precisão maior. (Atenção: BigDecimal não tem o logaritmo pronto; você precisa achar alguma implementação de logaritmos para BigDecimal.
Ou seja, essa lição de casa é bem sacana e pede bastante pesquisa. Como você viu, implementar em linguagem de programação (mesmo conhecendo as fórmulas) precisa de um pouco de cuidado.
- Pelo menos você já sabe onde chegar