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