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

Ayuda

Estas en el tema de Ayuda en el foro de C/C++ en Foros del Web. Estoy haciendo un programa en el cual introduzco un numero entero positivo y el programa imprime en pantalla los factores primos de dicho numero. En ...
  #1 (permalink)  
Antiguo 07/11/2008, 12:18
 
Fecha de Ingreso: julio-2008
Mensajes: 25
Antigüedad: 15 años, 9 meses
Puntos: 0
Ayuda

Estoy haciendo un programa en el cual introduzco un numero entero positivo y el programa imprime en pantalla los factores primos de dicho numero. En el programa uso dos funciones: una que calcula los factores del numero y otra que comprueba si son primos. Aqui os las pongo.

void calcular_factores(int numero) //Busca e imprime los factores primos
{
cout << "1" << endl;
for(int i=2; i<= numero/2; i++)
{
if((numero % i) == 0)
{
if(comprobar_primo(i) == 1)
cout << i << endl;
}
}
}


int comprobar_primo(int factor) //Comprueba si un factor es primo
{
int aux = 1;

for(int i=2; (i < factor/2) && (aux == 1) ; i++)
{
if((factor % i) == 0)
aux = 0;
}
return aux;
}

El programa funciona bien (por lo que he probado hasta ahora) excepto con los numeros que son multiplos de cuatro, pues cuatro me aparece como si fuera un factor primo (y no lo es ). Seguro que es una tonteria, pero no encuentro el problema.
Un saludo
  #2 (permalink)  
Antiguo 07/11/2008, 13:08
 
Fecha de Ingreso: julio-2008
Mensajes: 21
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Ayuda

Sin haberme parado a mirar el código, para que no te tome 4 como primo tienes que mirar que 4%2 por ejemplo no te de resto 0, entonces si da 0 es que no es primo, lo que tienes que hacer es ir probando a dividirlo entre los números primos menores que él, así ves si nunca ha dado resto 0 es que es primo, por ejemplo un programa que factoriza un número:

int main() {
int n,aux=2;
cin>>n;
Factorizar(n,aux);
}
void Factorizar(int n, int aux) {
if(aux==n)
cout<<n<<endl;
else {
if(n%aux==0) {
cout<<aux<<" ";
n=n/aux;
Factorizar(n,aux);
}
else Factorizar(n,aux+1);
}
}

Le pasas como aux, el 2, que es el primer primo (quitando el 1), y ya luego la misma función va incrementandolo.
  #3 (permalink)  
Antiguo 07/11/2008, 13:22
 
Fecha de Ingreso: octubre-2008
Mensajes: 34
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Ayuda

si incluyes un = en el FOR de comprobacion de primos, solucionas el problema del 4

for(int i=2; (i <= factor/2) && (aux == 1) ; i++)

Nota. El código tal como lo tienes, con un bucle FOR para conocer los factores, solamente te reporta una vez cada factor primo. Es deir, para 8 te arroja 1,2 (no 1,2,2,2), para 45 te daria 1,3,5 (no 1,3,3,5)

Última edición por IgnacioJavier; 07/11/2008 a las 14:39
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:07.