Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Estructura de Datos - Facultad de Ingeniería - Universidad Nacional de Jujuy
- =============================================================================
- */
- /**
- * @Autor: Equipo 5.1 Estructura de Datos.
- /* @Integrantes: | @Carrera: | @DNI:
- | |
- Camacho, Mauro Rodrigo | Ing. Informática | 41.654.090
- Cabana, Mario Ariel Fernando | Ing. Informática | 42.268.639
- Cruz, Facundo Emanuel | Ing. Informática | 41.609.573
- Fernández Rodríguez, Brisa Antonella | Licenciatura en Sistemas | 44.326.507
- López, Juan Carlos | Ing. Informática | 41.400.550
- Machaca, Aldo Martin | Ing. Informática | 31.455.538
- * @Ingeniera: Perez Ibarra.
- * @Fecha: 29/08/2020.
- */
- /*
- Trabajo Práctico N°0 / Programación Básica / Ejercicio 6
- --------------------- ------------------- ------------
- * Objetivo General: Diseñar un Programa que determine si un número es perfecto.
- * 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.
- * Metodología Empleada: Teorema de Euclides para números perfectos 2^(n-1)*(2^n-1).
- Si n es un número primo entonces, 2^n–1 genera un número primo de Mersenne.
- 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.
- * 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.
- * Api a utilizar. Paquete:- Java.Util / Clase:- Scanner.
- */
- import java.util.Scanner; // De este modo se permite ingresar un dato por consola.
- public class EjercicioSeis {
- public static void main (String[] args) //PRINCIPAL
- {
- Long numero;
- String respuesta;
- Scanner sc=new Scanner(System.in);
- do { //Ciclo empleado para ingresar valores según el usuario.
- do { //Valida un entero > 0.
- System.out.println("Ingrese un numero entero positivo:");
- numero=entradaLong(sc);
- } while (numero<1); // fin do while.
- if (numeroPerfecto(numero)) { //El método regresa un boolean al condicional.
- System.out.println("Es un numero PERFECTO");
- } else {
- System.out.println("No es un numero perfecto");
- } //fin else.
- System.out.println("Si desea terminar ingrese n/N");
- respuesta= sc.nextLine();
- } while ((!"n".equals(respuesta)) & (!"N".equals(respuesta))); //Hasta que la respuesta sea n o N.
- } // fin main
- public static long entradaLong(Scanner sc){ //Módulo tipo exception, dedicado a reconocer un valor numérico.
- String entrada;
- long salida;
- try {
- entrada= sc.nextLine();
- return salida=Long.parseLong(entrada);
- } catch (NumberFormatException nfe) {
- return salida=0;
- } //fin catch.
- }//fin función entradaLong.
- public static boolean esPrimo(long numero){ //Determina si un número es primo.
- long contador=0;
- for (long i = 1; i <= numero; i++) { //Cuenta los divisores del número.
- if (numero%i==0) {
- contador=contador+1;
- }
- } // fin for.
- if (contador==2) { //Verifica números primos.
- return true;
- }else {
- return false;
- }
- } //fin función esPrimo.
- public static boolean numeroPerfecto(long numero){ //Determina si un número es perfecto.
- long euclides=1,mersenne;
- long p=0;
- boolean validar;
- do { //Genera posibles perfectos para compararlos con el ingresado.
- p=p+1;
- if (esPrimo(p)){ // p es primo
- mersenne=(long)(Math.pow(2,p)-1); //Clase math elevación pow tipo de dato final long.
- if (esPrimo(mersenne)) {
- euclides=( mersenne*(long)Math.pow(2,p-1)); //Formula que genera números perfectos.
- if (euclides==numero) { //Se compara un número perfecto con el ingresado.
- validar= true;
- }else {
- validar= false;
- }// else comparación.
- }else{
- validar= false;
- } // else mersenne.
- }else{
- validar= false;
- } // else p.
- } while (euclides<numero ); //Hasta que euclides>=número.
- return validar;
- }// fin función numeroPerfecto.
- } // fin class
Add Comment
Please, Sign In to add comment