programa de calculo de numeros perfeitos até...

Masato

Membro
Boa tarde

Eu estou a fazer um programa que conta os numeros perfeitos até um determinado numero

um numero perfeito é aquele em que a soma dos seus divisores dão um resultado igual ao proprio numero, por exempo 6= 3+2+1 em que o 1,2, 3 são os divisores de 6.
Eo programa que escrevi só conta um numero perfeito até 30, ou seja introduzo o 30 e só retorna um numero perfeito ( o 6 creio eu), e devia retor nar dois numeros perfeitos ( o 6 e o 28)

O meu código é o seguinte:

static int perfectNumbersUpTo (int t)
{
int b=0;
int g =sumDivisors(b);
int f=0;
int d=0;
while (f<t)
{
if (g==f)
{
d=d+1;
f=f+1;

}
else
{
f=f+2;
}

}
return d;
}

ps:este programa corre num ambiente no aguiaj que é um plug in do eclipse desenvolvido na minha faculdade, por isso a sintaxe pode não ser bem a que vocês estão habituados, mas seja como for gostava que me ajudassem com o algoritmo.
 
Essa função retorna o valor 1 porque estás a começar pelo 0(zero).
Ora vê lá: Numero perfeito é um numero inteiro em que a soma dos seus divisores, excluindo ele mesmo, é igual ao próprio número.
0 -> divisores - =0 ??
1 -> divisores - =0 não
2 -> divisores 1=1 Não
...
6 -> divisores 1+2+3=6 perfeito!
..


Zero não entra nessa sequência.

A tua função para funcionar tem de a obter a soma dos divisores sempre que incrementas b,
por isso, coloca a instrução g=sumDivisors(b) dentro do ciclo while{} e inicializa as variáveis int b=1 e int f=1.

Edit: Olhando bem para a tua função e como o incremento é feito de 2 em 2, inicializa b e f com 2, bem como dentro do if o f=f+2, porque nenhum numero perfeito conhecido é impar.
 
Última edição:
Obrigado por responderes, ainda não testei mas o meu prof da cadeira tb me disse o mesmo que tu, amanhã vou testar e tentar chegar ao resultado
 
Back
Topo