6.24 Se dice que un número es un número perfecto si sus factores, incluyendo 1 (pero no el número entero), al sumarse dan como resultado el número entero. Por ejemplo, 6 es un número perfecto, ya que 6 = 1 + 2 + 3. Escriba un método llamado Perfecto que determine si el parámetro número es un número perfecto. Use este método en una aplicación que determine y muestre todos los números perfectos entre 1 y 1000. Imprima los factores de cada número perfecto para confirmar que el número sea realmente perfecto. Ponga a prueba el poder de su computadora, evaluando números más grandes que 1000. Muestre los resultados.
Este problema también aparece resuelto en C++ en Deitel_C++_3.29. En lugar de establecer 1000 como límite superior, se pide al usuario que lo introduzca. Para 10000 la salida es la siguiente:
Este programa imprime los numeros perfectos entre 1 y un numero dado.
Por favor introduzca un entero positivo:
10000
6 = 1 2 3
28 = 1 2 4 7 14
496 = 1 2 4 8 16 31 62 124 248
8128 = 1 2 4 8 16 32 64 127 254 508 1016 2032 4064
El siguiente código debe guardarse con el nombre UsaDeitel_6_24.java
import java.util.Scanner; public class UsaDeitel_6_24 { // Abre clase UsaDeitel_6_24 public static void main(String args[]) { // Abre main Scanner entrada = new Scanner(System.in); int numero; Deitel_6_24 miObjeto = new Deitel_6_24(); System.out.println("\nEste programa imprime los numeros perfectos entre"); System.out.println(" 1 y un numero dado. "); do { // Abre do System.out.println("\nPor favor introduzca un entero positivo: "); numero = entrada.nextInt(); } while ( 0 > numero ); // Cierra do miObjeto.Perfecto(numero); } // Cierra main } // Cierra clase UsaDeitel_6_24
El siguiente código debe guardarse con el nombre Deitel_6_24.java
public class Deitel_6_24 { // Abre Deitel_6_24 ////////////////////////////////////////// //METODO PERFECTO ///////////////////////////////////////// public void Perfecto( int N ) /* El metodo Perfecto recibe el limite superior es decir el numero hasta el que debe buscar perfectos. */ { // Abre metodo perfecto int cuenta = 0; // La variable cuenta se utiliza para ir sumando los factores // del numero j, al final se verifica la condicion de que esa // suma sea igual al numero j. Si es asi, solo si es asi, se // manda a imprimir el numero. Esto porque de otra manera se // tendria que ir almacenando cada vez los factores, pero no // se tiene a priori el numero, asi que no se sabe cuantas // variables hay que declarar. Por lo tanto he decidido // usar otro metodo para imprimir el numero que resulte perfecto. for ( int j = 1; j <= N; j++ ) { // Abre for cuenta = 0; // La variable cuenta se debe poner en cero cada vez que se // analiza otro numero. for ( int i = 1; i <= j/2 ; i++ ) // Solo hay que buscar los factores hasta j/2, porque despues // de ese numero ya no hay mas. if( 0 == j % i ) cuenta += i; // Si la variable i es un factor, se suma if ( cuenta == j ) // Si la suma de los factores es igual al numero, entonces { // ABre if Imprime(j); // se imprime } // Cierra if } // Cierra for } // Cierra metodo perfecto ////////////////////////////////////// //METODO IMPRIME ////////////////////////////////////// public void Imprime( int x ) // Esta funcion primero imprime el numero { // Abre Imprime System.out.printf("%d = ", x); for ( int s = 1; s <= x/2; s++ ) { // Abre for if ( 0 == x%s ) System.out.printf("\t%3d", s); // y despues imprime los factores } // Cierra for System.out.println("\n"); } // Cierra Imprime } // Cierra Deitel_6_24
ayuda
ResponderEliminarGracias.
ResponderEliminar