Java - Dado un número entero regrese un arreglo de enteros con la descomposición en factores primos

 
Vista:

Dado un número entero regrese un arreglo de enteros con la descomposición en factores primos

Publicado por Jose Luis (3 intervenciones) el 19/11/2020 01:26:28
Hola me podrian ayudar con este ejercicio
Dado que se tiene el método que obtiene el siguiente número primo dado un entero n positivo mayor a 0 (primo o no primo) y a partir del método para obtener el mínimo común múltiplo crear el método que dado un número entero positivo regrese un arreglo de enteros con la descomposición en factores primos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-1
Responder

respuesta

Publicado por Jose Luis (3 intervenciones) el 19/11/2020 03:22:33
en efecto es asi, tengo este codigo solo me hace falta meter en un arreglo el resultado package nuevo;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import static java.lang.Math.sqrt;
import java.util.Scanner;
 
/**
 *
 * @author pixel
 */
public class Nuevo {
    static int cant_factores = 0;
    static boolean hay_factores = false;
 
    public static void main(String[] args) {
        int n;
        Scanner reader = new Scanner(System.in);
        System.out.printf("Ingrese un número : ");
        n = reader.nextInt();
 
        if (n <= 1) {
            System.out.printf("Debe ingresar un número mayor que uno");
        } else {
            descomponer_factores(n);
        }
    }
 
    private static void descomponer_factores(int n) {
        int productoria = 1;
        int copia_n = n;
        int factor_primo = 2;
        do {
            int resto = copia_n % factor_primo;
            if (resto == 0) {
                copia_n /= factor_primo;
                productoria *= factor_primo;
                cant_factores++;
            } else {
                if (cant_factores > 0) {
                    escribe_factor(factor_primo);
                }
                factor_primo = siguiente_primo(factor_primo);
            }
        } while (productoria != n);
        escribe_factor(factor_primo);
    }
 
    private static int siguiente_primo(int n) {
        do {
            n++;
        } while (!es_primo(n));
        return n;
    }
 
    private static boolean es_primo(int n) {
        if (n <= 0) {
            return false;
        }
        int cant_divisores = 0;
        boolean encontro_divisores = false;
        int limite = (int) sqrt(n);
        int i = 2;
        while (i <= limite && !encontro_divisores) {
            if (n % i == 0) {
                cant_divisores++;
                encontro_divisores = true;
            }
            i++;
        }
        if (cant_divisores > 0 || n == 1) {
            return false;
        }
        return true;
    }
 
    private static void escribe_factor(int factor_primo) {
        if (hay_factores) {
            System.out.printf(",");
        } else {
            hay_factores = true;
        }
        if (cant_factores == 1) {
            System.out.printf("%d", factor_primo);
        } else {
            System.out.printf("%d^%d", factor_primo, cant_factores);
        }
        cant_factores = 0;
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

respuesta

Publicado por Billy Joel (876 intervenciones) el 19/11/2020 03:43:55
Se ve bien, lo que no entiendo a priori es el uso de sqrt pero llegamos al mismo resultado

Tienes alguna duda?

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar