[C con Clase] NUMEROS PERFECTOS

miguel mcubides en gmail.com
Vie Mayo 18 16:40:59 CEST 2007


hola a todos

El pasado 2007-05-18 10:37:16, Programante escribió:
 
P> ¿por qué no va a poder usar <= ?

si, tienes razón, es que yo estaba mirando solo con los menores a la mitad (sin contar la mitad) y esto sirve siempre que el numero sea impar, por eso me confundí y cometí el error de responder sin comprobar detenidamente.

P> Está buscando los divisores, por tanto debe comparar con num/2, de lo 
P> contrario no encontraría los divisores en cuadrados de números primos, 
P> por ejemplo.
P> Yo diría que el problema está más bien en la optimización que hace al 
P> recorrer sólo la mitad de los números: comprueba sólo la mitad, pero 
P> quiere sumar todos los divisores.
P> Andrés, puedes quitar el /2 para recorrerlos todos o bien cambiar el if() :
P> 	  if ((num%i)==0)
P>                 { 
P> 			if (i != num/2) { //Hemos encontrado dos divisores
P> 	                        printf("%i, %i\n",i, num/i); 
P> 				suma=suma+i+num/i;
P> 			} else { //Sólo uno
P> 	                        printf("%i\n",i); 
P> 				suma=suma+i;
P> 			}
P>                 } 
P> > CAR> 		printf("%i es perfecto.\n\a",num);

en realidad (y por favor discúlpenme si me equivoco nuevamente en mi apreciación), creo que habría un error al tomar los números pares:

pongamos por ejemplo el número 6:

i=2->suma=suma+2+6/2->suma=suma+2+3
i=3->suma=suma+3->suma=suma+3
acá estaría sumando dos veces el valor de la mitad, y sucedería así para todos los pares

P> \a es la alarma. El ordenador dará un pitido cuando encuentre un número 
P> perfecto.

interesante, no lo sabía, gracias por la aclaración programante, a mí si me sonaba el pitico, pero pensé que era porque mostraba algún tipo de "error" en la búsqueda del caracter, nuevamente gracias por la info.

Por otro lado me dí cuenta de que lo que el compañero Andres necesitaba realmente no era lo que nosotros estabamos mirando, sino lo que steven respondió, ya que no le tocaba mirar si el número ingresado era o no perfecto, sino mostrar el n-ésimo valor perfecto (siendo n el valor ingresado por el usuario)


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