paulo1205
(usa Ubuntu)
Enviado em 02/05/2013 - 16:33h
Em primeiro lugar, ao postar código no VoL, coloque-o entre as tags
[code] e
[/code]. Do jeto como você fez, o código ficou muito ruim de ler, e o índice
[i] aplicado ao array foi confundido com o marcador do fórum que faz com que o texto fique em itálicos.
Felizmente, aqui no VoL você pode editar a postagem que já fez, permitindo-lhe colocar nela as referidas tags. Isso facilitará a contribuição de outras pessoas, que poderão ler o código com mais clareza.
Um erro básico no qual você incorreu foi esquecer que um array com
N elementos usa, em C e C++, índices que vão de
0 a
N-1. Eu vi que você declara um array com
num elementos e tem um loop em que o índice (
i) chega até o valor de
num, o que significa que você extrapola em um elemento o tamanho do array.
A forma mais fácil de você corrigir isso é declarar o array com tamanho
num+1, sem mexer no resto do programa.
Outro ponto de atenção para você é que o produto de todos os primos compreendidos entre 92 e 1478 certamente excede o tamanho máximo de uma variável do tipo
int. Logo, a sua multiplicação pelos fatores primos vai provocar overflow do valor de
u, deixando-o com um valor que em nada se parecerá com o que você possivelmente gostaria de encontrar.
Na verdade, só de curiosidade, eu peguei de um site uma tabela de números primos e vi que o produto em questão gera um número com 582 algarismos -- muito maior do que o que se consegue armazenar com
unsigned int,
unsigned long ou
unsigned long long, e maior mesmo do que os limites de
float e
double. Num PC com GCC (mas não com Visual C++!),
long double conseguiria guardar o número, mas com um enorme erro de arredondamento, pois ele só tem 64 bits para a mantissa, ao passo que o valor exato requereria 1936 bits para ser guardado.
Se você precisar do valor exato, talvez você queira usar GMP ou outra biblioteca de bignums (corruptela de
big numbers). Se não quiser ou não puder usar bibliotecas externas, talvez a melhor saída seja trabalhar com os números como strings de dígitos, criando as suas próprias rotinas para as operações de soma e multiplicação.