Cabana_Mario_Ariel_F

TP0E6_Semiefinitivo

Aug 29th, 2020 (edited)
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.95 KB | None | 0 0
  1. /*
  2.  * Estructura de Datos - Facultad de Ingeniería - Universidad Nacional de Jujuy
  3.   =============================================================================
  4.  */
  5.  
  6. /**
  7.  * @Autor: Equipo 5.1 Estructura de Datos.
  8. /*      @Integrantes:                  |    @Carrera:             |   @DNI:
  9.                                        |                          |
  10.   Camacho, Mauro Rodrigo               | Ing. Informática         | 41.654.090
  11.   Cabana, Mario Ariel Fernando         | Ing. Informática         | 42.268.639
  12.   Cruz, Facundo Emanuel                | Ing. Informática         | 41.609.573
  13.   Fernández Rodríguez, Brisa Antonella | Licenciatura en Sistemas | 44.326.507
  14.   López, Juan Carlos                   | Ing. Informática         | 41.400.550
  15.   Machaca, Aldo Martin                 | Ing. Informática         | 31.455.538
  16.  
  17.  * @Ingeniera: Perez Ibarra.
  18.  * @Fecha: 29/08/2020.
  19.  */
  20.  
  21.  /*
  22.    Trabajo Práctico N°0 / Programación Básica / Ejercicio 6
  23.   ---------------------   -------------------   ------------
  24.   * Objetivo General: Diseñar un Programa que determine si un número es perfecto.
  25.   * Definición: Un número es perfecto cuando la suma de sus divisores, con excepción del mismo, es igual al número en cuestión.
  26.   * Metodología Empleada: Teorema de Euclides para números perfectos 2^(n-1)*(2^n-1).
  27.     Si n es un número primo entonces, 2^n–1 genera un número primo de Mersenne.
  28.     De este modo la formula de Euclides genera un número perfecto para compararlo con el valor ingresado por el ususario y ahorrarse tiempo en cálculos.
  29.   * El funcionamiento será a traves del entorno de desarrollo integrado Eclipse 2020-06(4.16)-(IDE for Java Developers), empleando el leguaje de programación Orientado a Objeto Java.
  30.   * Api a utilizar. Paquete:- Java.Util / Clase:- Scanner.
  31.  */
  32. import java.util.Scanner;   // De este modo se permite ingresar un dato por consola.
  33. public class EjercicioSeis {
  34.     public static void main (String[] args) //PRINCIPAL
  35.     {
  36.         Long numero;
  37.         String respuesta;
  38.         Scanner sc=new Scanner(System.in);
  39.         do {                                //Ciclo empleado para ingresar valores según el usuario.
  40.             do {                            //Valida un entero > 0.
  41.               System.out.println("Ingrese un numero entero positivo:");
  42.               numero=entradaLong(sc);    
  43.             } while (numero<1);   // fin do while.
  44.        
  45.              if (numeroPerfecto(numero)) {  //El método regresa un boolean al condicional.
  46.                  System.out.println("Es un numero PERFECTO");
  47.              } else {
  48.                  System.out.println("No es un numero perfecto");
  49.              } //fin else.
  50.            
  51.             System.out.println("Si desea terminar ingrese n/N");
  52.             respuesta= sc.nextLine();        
  53.         } while ((!"n".equals(respuesta)) & (!"N".equals(respuesta))); //Hasta que la respuesta sea n o N.
  54.     } // fin  main
  55.    public static long entradaLong(Scanner sc){ //Módulo tipo exception, dedicado a reconocer un valor numérico.
  56.         String entrada;
  57.         long salida;
  58.         try {                              
  59.             entrada= sc.nextLine();
  60.             return salida=Long.parseLong(entrada);
  61.         } catch (NumberFormatException nfe) {
  62.            return salida=0;
  63.         } //fin catch.
  64.     }//fin función entradaLong.
  65.    
  66.     public static boolean esPrimo(long numero){ //Determina si un número es primo.
  67.         long contador=0;
  68.         for (long i = 1; i <= numero; i++) {    //Cuenta los divisores del número.
  69.             if (numero%i==0) {
  70.                 contador=contador+1;
  71.             }
  72.         } // fin for.
  73.         if (contador==2) {          //Verifica números primos.
  74.             return true;
  75.         }else {
  76.             return false;
  77.         }
  78.     }   //fin función esPrimo.
  79.    
  80.     public static boolean numeroPerfecto(long numero){ //Determina si un número es perfecto.
  81.         long euclides=1,mersenne;
  82.         long p=0;
  83.         boolean validar;
  84.         do {                                            //Genera posibles perfectos para compararlos con el ingresado.  
  85.             p=p+1;    
  86.             if (esPrimo(p)){ // p es primo
  87.                  mersenne=(long)(Math.pow(2,p)-1);      //Clase math elevación pow tipo de dato final long.
  88.                 if (esPrimo(mersenne)) {               
  89.                      euclides=( mersenne*(long)Math.pow(2,p-1)); //Formula que genera números perfectos.
  90.                     if (euclides==numero) {             //Se compara un número perfecto con el ingresado.
  91.                          validar= true;
  92.                     }else {
  93.                          validar= false;
  94.                         }// else comparación.
  95.                 }else{
  96.                      validar= false;
  97.                      } // else mersenne.
  98.             }else{
  99.                 validar= false;
  100.                 } // else p.
  101.     } while (euclides<numero );                         //Hasta que euclides>=número.
  102.     return validar;
  103.     }// fin función numeroPerfecto.
  104. } // fin class
Add Comment
Please, Sign In to add comment