Guest User

Untitled

a guest
Apr 7th, 2020
204
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  *
  3.  * @author Mrivem
  4.  */
  5. public class NumerosPerfectos {
  6.     public static void main(String[] a){
  7.         //perfectosHasta(10000); // ejercicio 1
  8.         perfectosHasta(Integer.MAX_VALUE); // ejercicio 2 se me queda pegado :/
  9.        
  10.         // ejercicio 5
  11.         //esPrimoDesdeHasta(8321, 9637);
  12.        
  13.     }
  14.    
  15.     public static void perfectosHasta(int limite){
  16.         perfectosDesdeHasta(1, limite);
  17.     }
  18.    
  19.     public static void perfectosDesdeHasta(int desde, int hasta){
  20.         for (int i = desde; i < hasta; i++) {
  21.             if(esPerfecto(i)){
  22.                 System.out.format("%s es perfecto\n", i);
  23.             } else {
  24.                 //if(i > 10000)
  25.                 //    System.out.print(".");
  26.             }
  27.         }
  28.     }
  29.    
  30.     public static boolean esPerfecto(int num){
  31.         // Un numero perfecto no puede ser impar
  32.         if (num % 2 == 1) {
  33.             return false;
  34.         }
  35.  
  36.         long resultado = 1; // el divisor trivial
  37.         long i = 2;
  38.         // porque i <= sqrt(num) ? asi revisas 2*3 y 3*2 en una sola pasada
  39.         while (i * i <= num) {
  40.             if (num % i == 0) {
  41.                 resultado += i;
  42.                 resultado += num / i;
  43.             }
  44.             i++;
  45.         }
  46.         if (i * i == num) { // si el numero es un cuadrado perfecto lo contaste dos veces, elimina una
  47.             resultado -= i;
  48.         }
  49.        
  50.         // retorna si la suma es igual al numero
  51.         return resultado == num;
  52.     }
  53.    
  54.     public static void esPrimoDesdeHasta(int desde, int hasta){
  55.         int contador = 0;
  56.         for(int i = desde; i <= hasta; i++){
  57.             if(esPrimo(i)){
  58.                 System.out.format("%s es primo\n", i);
  59.                 contador++;
  60.             }
  61.         }
  62.         System.out.format("Se encontraron %s numeros primos en [%s; %s]\n",contador, desde, hasta);
  63.     }
  64.    
  65.     public static boolean esPrimo(int num){
  66.         // 1 no es primo y meto los negativos en el mismo saco
  67.         if(num <= 1) return false;
  68.        
  69.         // Pruebo dividir el numero desde 2 hasta num - 1
  70.         for(int i = 2; i < num; i++){
  71.             // Si la division es entera no es primo
  72.             if(num % i == 0){
  73.                 return false;
  74.             }
  75.         }
  76.         // Si no paso ná arriba, es primo
  77.         return true;
  78.     }
  79. }
RAW Paste Data