[C con Clase] NUMEROS PERFECTOS

Programante programante en gmail.com
Vie Mayo 18 12:36:50 CEST 2007


miguel escribió:
> Hola Andres
> El pasado 2007-05-17 22:38:22, CESAR ANDRES ROMERO escribió:
>
>
> CAR>         printf("Divisores de %i: ", num); 
>
> CAR>         for(i=1;i<=(num/2);i++) 
>
> creo que tu error está acá, no deberías usar <= sino simplemente <, 
¿por qué no va a poder usar <= ?
Está buscando los divisores, por tanto debe comparar con num/2, de lo 
contrario no encontraría los divisores en cuadrados de números primos, 
por ejemplo.
Yo diría que el problema está más bien en la optimización que hace al 
recorrer sólo la mitad de los números: comprueba sólo la mitad, pero 
quiere sumar todos los divisores.
Andrés, puedes quitar el /2 para recorrerlos todos o bien cambiar el if() :

	  if ((num%i)==0)
                { 
			if (i != num/2) { //Hemos encontrado dos divisores
	                        printf("%i, %i\n",i, num/i); 
				suma=suma+i+num/i;
			} else { //Sólo uno
	                        printf("%i\n",i); 
				suma=suma+i;
			}
                } 




> CAR> 		printf("%i es perfecto.\n\a",num);
>
> tal vez haya sido al transcribir, pero \a no es nada, probablemente pensabas en \t, espero haberte ayudado
>   
\a es la alarma. El ordenador dará un pitido cuando encuentre un número 
perfecto.





Más información sobre la lista de distribución Cconclase