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

primos entre si c++

Estas en el tema de primos entre si c++ en el foro de C/C++ en Foros del Web. tengo que realizar un ejercicio en c++ y me trae de cabeza el ejercicio es el siguiente: Se dice que un número entero n es ...
  #1 (permalink)  
Antiguo 29/06/2012, 17:50
 
Fecha de Ingreso: junio-2012
Mensajes: 3
Antigüedad: 11 años, 9 meses
Puntos: 0
primos entre si c++

tengo que realizar un ejercicio en c++ y me trae de cabeza
el ejercicio es el siguiente:
Se dice que un número entero n es raro cuando se verifica que para todo número m, menor que n, si ambos números son primos entre sí, ocurre necesariamente que m es un número primo. Por su parte, se dice que dos números son primos entre sí cuando el máximo común divisor de ambos números es 1.
Elaborar el diagrama modular y realizar un programa c++ que muestre por pantalla todos los números raros existentes entre 3 y un valor introducido por el usuario (ambos inclusive).
Nota: el algoritmo más eficiente para calcular el máximo común divisor sigue siendo el algoritmo de Euclides


mi código es el siguiente

Código:
#include<iostream>
using namespace std;

bool mcd (int, int);//funcion para calcular divisores comunes devuelve true o false 


void main(){

bool primos;
int n; //numero introucido por el usuario 
cout<<"introduce el numero"<<endl;
cin>>n;

for(int m=3;m<n ;m++){ // realiza la operacion para todos los numeros entre 3 y m<n

primos=mcd(int n,int m);
if (primos)//si se devuelve true imprime son primos
cout << n << " y " << m << " son primos entre si\n";
else // si devuelve false no son primos 
cout << n << " y " << m << " no son primos entre si\n";
}
}

bool mcd (int n, int m){

bool	primos;
for (int i = 2; i <= n; i++)
if (n % i == 0 && m % i == 0) //comprueba si tienen un divisor comun 
primos = false;
return primos;
}
  #2 (permalink)  
Antiguo 30/06/2012, 11:02
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
Respuesta: primos entre si c++

la manera que usas para comprobar si los dos numeros tienen solamente el 1 como divisor comun es correcto, pero el problema dice que el algoritmo mas eficiente para hacerlo es el de euclides, indirectamente te dice que utilices este porque si los numeros son muy grandes el algoritmo que planteaste va a demorar mucho... luego dice que, si los dos numeros son primos, entonces, aparte de tener solamente el 1 como divisor comun, el numero menor tiene que ser primo. Te faltaria comprobar si el numero menor es primo

en la funcion mcd no inicializaste la variable primos, en caso de que el if de siempre falso, nunca va a tomar un valor y la funcion puede retornar cualquier cosa:

Código C++:
Ver original
  1. bool mcd (int n, int m){
  2.  
  3. bool primos= true;
  4.  
  5. for (int i = 2; i <= n; i++)
  6.    if (n % i == 0 && m % i == 0) //comprueba si tienen un divisor comun  
  7.        primos = false;
  8.  
  9. return primos;
  10. }

aca te dejo el algoritmo de euclides: parte practica

teoria
  #3 (permalink)  
Antiguo 30/06/2012, 14:25
 
Fecha de Ingreso: junio-2012
Mensajes: 3
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: primos entre si c++

hola gracias por responder ya realice el cambio que me dijiste . el compilador me da error de sintaxis en la linea 14 justo cuando invoco a la función mcd
  #4 (permalink)  
Antiguo 30/06/2012, 17:00
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
Respuesta: primos entre si c++

es porque cuando llamas a una funcion, no debes poner el tipo de variable de cada parametro, el compilador ya sabe que tipo de variables esperar, cambiala por la siguiente:

Código C++:
Ver original
  1. primos= mcd(n, m);
  #5 (permalink)  
Antiguo 30/06/2012, 17:35
 
Fecha de Ingreso: junio-2012
Mensajes: 3
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: primos entre si c++

muchas gracias ya lo he solucionado y funciona perfectamente

Etiquetas: funcion, int, primos, programa
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 16:34.