Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- *
- * @author Mrivem
- */
- public class NumerosPerfectos {
- public static void main(String[] a){
- //perfectosHasta(10000); // ejercicio 1
- perfectosHasta(Integer.MAX_VALUE); // ejercicio 2 se me queda pegado :/
- // ejercicio 5
- //esPrimoDesdeHasta(8321, 9637);
- }
- public static void perfectosHasta(int limite){
- perfectosDesdeHasta(1, limite);
- }
- public static void perfectosDesdeHasta(int desde, int hasta){
- for (int i = desde; i < hasta; i++) {
- if(esPerfecto(i)){
- System.out.format("%s es perfecto\n", i);
- } else {
- //if(i > 10000)
- // System.out.print(".");
- }
- }
- }
- public static boolean esPerfecto(int num){
- // Un numero perfecto no puede ser impar
- if (num % 2 == 1) {
- return false;
- }
- long resultado = 1; // el divisor trivial
- long i = 2;
- // porque i <= sqrt(num) ? asi revisas 2*3 y 3*2 en una sola pasada
- while (i * i <= num) {
- if (num % i == 0) {
- resultado += i;
- resultado += num / i;
- }
- i++;
- }
- if (i * i == num) { // si el numero es un cuadrado perfecto lo contaste dos veces, elimina una
- resultado -= i;
- }
- // retorna si la suma es igual al numero
- return resultado == num;
- }
- public static void esPrimoDesdeHasta(int desde, int hasta){
- int contador = 0;
- for(int i = desde; i <= hasta; i++){
- if(esPrimo(i)){
- System.out.format("%s es primo\n", i);
- contador++;
- }
- }
- System.out.format("Se encontraron %s numeros primos en [%s; %s]\n",contador, desde, hasta);
- }
- public static boolean esPrimo(int num){
- // 1 no es primo y meto los negativos en el mismo saco
- if(num <= 1) return false;
- // Pruebo dividir el numero desde 2 hasta num - 1
- for(int i = 2; i < num; i++){
- // Si la division es entera no es primo
- if(num % i == 0){
- return false;
- }
- }
- // Si no paso nรก arriba, es primo
- return true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement