Olá pessoal…estou com um problema…preciso de uma variável que guarde um valor imenso! Tenho que fatorar o número 1.500.000 (um milhão e meio!!!) e gostaria de saber qual variável suporta tantos caracteres…eu vi o resultado do fatorial impresso, são 4 folhas para um único número!! Alguém pode me ajudar??..é meio urgente!
O método para fatorar eu ja tenho, só preciso saber qual variável utilizar e como utilizar esta variável…
quem puder me quebrar este galho, agradecerei mto!
Você já tentou armazenar esse valor em um double?
De acordo com Kathy Sierra (Sun Certified Java Programmer) não é necessário um intervalo para o tipo double.
Testa com esse tipo!
Seu número não é grande. Se fosse grande de verdade (mais de 100 dígitos), lhe recomendaria computação quântica. Mas para este porte nem precisa usar long. Pode usar int mesmo que vai até 214 milhões.
Fatorar != fatorial
Bland, se fosse um problema de números reais, nem precisaria de double porque como tem apenas 7 dígitos significativos, bastaria usar float. Mas fatoração fala de números inteiros.
Concordo com o tingol, use esse método, porque BigInteger é muito lendo para fins de processar numeros muito grandes.
O número 1.500.000! tem aproximadamente 27902869 bits (uma estimativa). Hoje fatorar um número de 1024 bits custa 20 mips ano. Ou seja, o número que você quer é 27mil vezes maior. Usando o melhor algorítmo disponível você vai precisar de 250milhões de mips ano.
Para obter 250 milhões de mips ano, basta você ter acesso a 100mil máquinas P4 2.5Ghz, se forem quad core feito o MacPro, corta pra 25mil. Porém o trabalho deve ser pra segunda, então vc precisa fatorar no final de semana, então aumente esse número para 4.5milhões desses.
Isso para a etapa de crivagem, claro. Para fazer a redução do sistema linear, sei lá usando block-wiedermann por exemplo, vc vai ter uma matriz quadrada de tamanho superior a 2^24, então serão necessários apenas
256 teras de memória principal para executar o algorítmo.
Até aqui tudo bem, um MacPro custa $2.500 dolares. Para comprar eles e todo equipamento de rede necessários você vai gastar coisa de 25bilhões de reais.
Moral da história, ou você pensa e entende direito o problema, ou então fique de DP.
A pergunta foi sobre que variável para armazenar fatoração de 1500000 ou estou comendo mosca?
Como um número fatorado de 1500000 pode ser maior do que 1500000?
Acho que ando viajando…
[]s
Luca[/quote]
Todos comeram mosca, porque o vortex não soube explicar o problema dele. Ele precisa calcular fatorial e ele achou que ‘fatorar’ é o verbo a ser utilizado.
Pelo resumo do pessoal, vai demorar, e bastante… talvez ja esteja calculado, faça uma pesquisa no google, alguem deve ter isso em DVD… mas acho dificil.
vc precisa do numero exato ou aproximado? não deve ser dificil fazer uma aproximação… ou será? :twisted:
Trabalhei muitos anos como engenheiro em uma das maiores se não a maior empresa de montagens industriais do Brasil. Lá as pressões e os prazos eram MUITO maiores do que alguém de TI pode imaginar porque a grana envolvida geralmente era MUITO maior. Na empresa corria o seguinte ditado:
“O impossível a gente faz na hora, milagre demora mais um pouquinho!”
Todo este preâmbulo foi para perguntar: para que quer isto?
Uma vez o Daniel tinha proposto exatamente esse problema - quem conseguia calcular mais rápido o fatorial de um número muito grande. Havia aquela solução óbvia - usar BigInteger e efetuar milhões de multiplicações - mas depois apareceram várias soluções que não envolviam tantas contas assim. É só procurar aqui no forum.
Isso é um trabalho de probabilidade…eu preciso fazer um cálculo para saber qual a probabilidade de erro em cada peça de um lote de 1.500.000 de peças…tenho que utilizar a fórmula do cálculo binomial
n = número de peças no lote
x = representa cada peça analizada