Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Divisores primos de un numero

Estas en el tema de Divisores primos de un numero en el foro de C/C++ en Foros del Web. Buenas tardes a todos, estoy haciendo unos ejercicios y llevo unos días intentando hacer este y no me sale. Tengo que mostrar los divisores primos ...
  #1 (permalink)  
Antiguo 02/02/2014, 13:49
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 8 meses
Puntos: 2
Divisores primos de un numero

Buenas tardes a todos,

estoy haciendo unos ejercicios y llevo unos días intentando hacer este y no me sale.

Tengo que mostrar los divisores primos de un numero.

Por ejemplo de 30 los divisores primos son: 1, 2, 3, 5

Código para calcular los divisores de un numero
Código:
#include <stdio.h>

int main(void) {
    int numero;
    int divisor = 1;
    
    printf("n�mero: ");
    scanf("%d", &numero);

    while (divisor <= numero) { 
    	if (numero % divisor == 0) {
    		printf("%d\n", divisor);
    	}
    	divisor++;
    }
        
    return 0;
}

Código para calcular numero primo
Código:
#include <stdio.h>

int main(void) {
    int numero = 1;
    int contador = 0; 
    int i;
    
    printf("n�mero: ");
    scanf("%d", &numero);

    for (i = 1; i <= numero; i++) {
    	if (numero % i == 0) {
            contador++;
    	}
    }
    
    if (contador == 2) {
		printf("numero primer\n");
    } else {
    	printf("no es numero primer");
    }
    	
    return 0;
}
  #2 (permalink)  
Antiguo 02/02/2014, 20:42
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 15 años, 6 meses
Puntos: 20
Respuesta: Divisores primos de un numero

Hola, no te copio el código porque sino no tiene chiste , así lo intentas vos.
Pero, viendo el primer código que pegaste, la idea sería, primero ver los divisores del numero y despues, cada divisor, ver si es primo, o sea (como hiciste en el código de abajo) ver si tiene 2 o menos divisores (o sea, el 1 y el mismo), encontes, yo pondría otro while dentro del if para ver si ese divisor es primo o no, esto lo podes ver poniendo un contador como hiciste en el 2º código... y despues, abajo del 2º while, pero adentro del 1º while, poner un if para ver si el contador es menor o igual a 2, y si lo es, el divisor es primo y si no, se vuelve el contador a cero y se pasa al proximo divisor...

Fijate si se entiende y si lo podes hacer... y si no, veo de pegarte algo de código, yo lo trabaje sobre el 1º código que pegaste, agregando lo que te dije, y me funcionó.

Espero te sierva. Saludos.
  #3 (permalink)  
Antiguo 03/02/2014, 11:15
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 8 meses
Puntos: 2
Respuesta: Divisores primos de un numero

Yo antes de postear el post tenia este codigo, es parecido a lo que tu comentas.

Intente seguir tus pasos pero no...

Código:
#include <stdio.h>

int main(void) {
    int numero;
    int divisor = 1;
    int contador = 0;
    int i;

    printf("número: ");
    scanf("%d", &numero);

    while (divisor <= numero) { 
    	if (numero % divisor == 0) {
		    for (i = 1; i <= numero; i++) {
		    	if (numero % i == 0) {
		    		contador++;
		    	} 
		    }    
			if (contador <= 2) {
    			printf("%d\n", divisor);	
    		} else {
    			contador = 0;
    		}
    	}
    	divisor++;
    }
        
    return 0;
}
  #4 (permalink)  
Antiguo 03/02/2014, 11:40
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 15 años, 6 meses
Puntos: 20
Respuesta: Divisores primos de un numero

Bueno, vas bien, no te falta mucho.
Prueba de cambiar 'numero' por 'divisor' en el for y en el if que le sigue ya que vos queres ver si el divisor es primo, y no el numero.
Y después, el else no tendría que ir, deja el contador=0 justo abajo del if, porque siempre se tiene que volver a cero, entre o no el if anterior.

Hacele esos cambios y fijate.
Saludos.

Etiquetas: ejercicio, int, numero, primos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:42.