Tema destacado: Recuperar cuenta de Google, GMail, Youtube
Autor
|
Tema: Dudilla con un codigo para ver si un numero es primo (Leído 4,299 veces)
|
TheMaker
Desconectado
Mensajes: 513
|
el code : #include <iostream> #include <cmath> using namespace std;
int main(){ int np,b,c; int x=0; cin>>np; np=abs(np); b=np-1; if(np!=0 && np!=1){ do{ c=np%b; if(c==0) x=1; b=b-1; }while(b>1); } if(((x==0)||(np==1))&&(np!=0)) cout<<"primo"; if(x==1||np==0) cout<<"no primo"; system("pause"); system("exit"); } Pues bien el programa funciona para todos los numeros excepto para el 2 que me dice que no es primo, xk? Todos los demas m los hace bien 3,5,7 me dice con son primos y 4,6... me dicen k son no primos pero si le meto 2 me suelta k es no primo.
|
|
|
|
|
En línea
|
Gibe money please or I report you
|
|
|
jackl007
Desconectado
Mensajes: 1.381
[UserRPL]
|
coloca una condicion de que si el numero ingresado es "2" diga si qe si es primo...
|
|
|
|
|
En línea
|
|
|
|
TheMaker
Desconectado
Mensajes: 513
|
Pero a ver mi codigo deberia de funcionar para todos los numeros excepto para 0 y 1 que lo soluciono con los if's.
lo k quiero saber pork con 2 no va!!!!!! deberia de ir no lo entiendo
|
|
|
|
|
En línea
|
Gibe money please or I report you
|
|
|
|
SirLanceCC
|
Mira yo veo tu código poco claro... muy confuso,, lo cual hace que corregirlo sea más dificil... Mira este ejemplo que hice en java hace ya algún tiempo: inumero es el entero leido, y el resto de las variables creo que son autoexplicatorias... //Boucle que divide el número N, introducido por el usuario, //entre todos los numeros anteriores a raiz cuadrada de N for(contador = 2; contador < Math.sqrt(inumero); contador++){ //Divide el numero a comprobar residuo = inumero % contador; //Si el residuo es 0, significa que el numero NO es primo ya que se pudo dividir if(residuo == 0){ //El numero NO es primo primo = false; //Salimos del boucle break; } }//Fin del boucle Usa nombres de variable más descriptivos para que tu código sea más claro.
|
|
|
|
|
En línea
|
|
|
|
|
Eternal Idol
|
Si lo depuras veras que np es 2 y por lo tanto b es 1 y c 0 (2%1). Si c es 0 x es 1, b es 0 y termina el bucle.
Ya estamos en la linea 20, x sigue siendo 1 y np sigue siendo 2 asi que segun tu codigo no es primo.
Linea 22, x es 1, no es primo.
Tal vez sea mejor empezar de nuevo ...
|
|
|
|
|
En línea
|
 La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
TheMaker
Desconectado
Mensajes: 513
|
Si lo depuras veras que np es 2 y por lo tanto b es 1 y c 0 (2%1). Si c es 0 x es 1, b es 0 y termina el bucle.
Ya estamos en la linea 20, x sigue siendo 1 y np sigue siendo 2 asi que segun tu codigo no es primo.
Linea 22, x es 1, no es primo.
Tal vez sea mejor empezar de nuevo ...
vale vale eso era lo k se me habia pasado
|
|
|
|
|
En línea
|
Gibe money please or I report you
|
|
|
TheMaker
Desconectado
Mensajes: 513
|
weno al final hice esto: #include <iostream> #include <cmath> using namespace std;
int main(){ int numero; bool primo=true; cout<<"introduzca el numero "; cin>>numero; abs(numero); for(int i=2;i<numero;i++){ if(numero%i==0) primo=false; } if(primo==true) cout<<"El numero insertado es primo\n"; if(primo==false) cout<<"el numero insertado no es primo\n"; system("pause"); }
|
|
|
|
|
En línea
|
Gibe money please or I report you
|
|
|
BETA_V
Desconectado
Mensajes: 131
HC
|
hola¨¨subo un codigo que hice hace algun tiempo ,,espero que sirva ,,sino igual,,jejej #include <stdlib.h> #include <stdio.h> int divisible(int a,int b){ return(a%b==0); } int main (int argc, char **argv) { int n; printf("Ingrese un numero para determinar si es primo o no\n"); scanf("%d",&n); int primo=1; int divisor=2; do { if (divisible(n,divisor)==1) primo=0; else divisor+=1; } while ((divisor<n)&& primo==1); if (primo==1) printf("\n%d es primo\n",n); else printf("\n%d es compuesto\n",n); return 0; }
|
|
|
|
|
En línea
|
|
|
|
|
SirLanceCC
|
for(int i=2;i<numero;i++){ if(numero%i==0){ primo=false; break; } } Te recomiendo que uses el break para salir del for una vez que se encuentre que el numero es divisible. Imagina que ingresas el número 1234567890, el cual es divisible entre dos, por lo tanto no es primo. Pero tu programa hará todas las divisiones que faltan y en un número grande puede tardar.
|
|
|
|
|
En línea
|
|
|
|
BETA_V
Desconectado
Mensajes: 131
HC
|
hola¡¡¡ el codigo que habia subido antes era erroneo  por que no tomaba el 2 como primo ,este esta arreglado,,,byeees,,ahh para THEMAKER,, diria que con el primer codigo que pusiste que te fijes en ves de un do while lo cambies por un while,espero que te sirva. #include <stdlib.h> #include <stdio.h> int divisible(int a,int b){ return(a%b==0); } int main (int argc, char **argv) { int n; int i; for(i=1;i<10;i++){ int primo=1; int divisor=2; while ((divisor<i)&& primo==1) { if (divisible(i,divisor)==1) primo=0; else divisor+=1; } if (primo==1) printf("\n%d es primo\n",i); else printf("\n%d es compuesto\n",i); } system("pause"); return 0;}
|
|
|
|
|
En línea
|
|
|
|
(*<>*) HaCKinG_SkrIP
Desconectado
Mensajes: 207
|
Este está relacionado: /*Este programa calcula la suma de todos los enteros positivos no primos comprendidos entre dos números entero positivos dados A y B*/ #include <stdio.h>
void main ()
{ int A, B, b, c, i, sum=0; /*Inicializo la variable "sum"*/
do /*Para evitar que el usuario introduzca los valores de forma incorrecta, por el orden o por ser numeros negativos*/
{ printf("Escriba dos numeros enteros positivos, de menor a mayor separados de un blanco.\nSe calculara la suma de todos los numeros enteros positivos no primos\ncomprendidos entre esos dos numeros\n"); scanf("%d %d", &A, &B);
if ((A>=B) || (A<=0)) printf("\nRecuerda que el valor de A debe ser menor que el de B, y por lo tanto,\ndiferentes. Y ademas los dos deben ser positivos\n\n"); }while ((A>=B) || (A<=0));
if( B<4) printf("La suma de los numeros enteros positivos no primos entre %d y %d es 0\n\n",A,B); /*Esto lo hago pq entre 0 y 3 todos son primos*/
c=A;/*Empezamos a partir del valor más pequeño*/
while( (c>=A) && (c<=B) ) /*Compruebo que el numero esté dentro del rango establecido por A y B*/ { i=2; /*Inicializo la variable "i"*/ do /*Compruebo si el numero es primo*/ { b= c%i;
i++;
}while( (b!=0) && (i<=c/2) );
if(b==0) /*En caso de no ser primo lo sumo*/ sum= sum + c; c++;
}
printf("\nLa suma de todos los numeros enteros positivos no primos\ncomprendidos entre %d y %d es de %d\n\n",A, B, sum); /*Simplemente escribo el resultado*/ }
|
|
|
|
|
En línea
|
|
|
|
(*<>*) HaCKinG_SkrIP
Desconectado
Mensajes: 207
|
el code : #include <iostream> #include <cmath> using namespace std;
int main(){ int np,b,c; int x=0; cin>>np; np=abs(np); b=np-1; if(np!=0 && np!=1){ do{ c=np%b; if(c==0) x=1; b=b-1; }while(b>1); } if(((x==0)||(np==1))&&(np!=0)) cout<<"primo"; if(x==1||np==0) cout<<"no primo"; system("pause"); system("exit"); } Pues bien el programa funciona para todos los numeros excepto para el 2 que me dice que no es primo, xk? Todos los demas m los hace bien 3,5,7 me dice con son primos y 4,6... me dicen k son no primos pero si le meto 2 me suelta k es no primo. Yo hice uno super sencillo y funciona a la perfección: #include <stdio.h>
void main()
{ int num, i, res;
printf("Intoduzca un numero para comprobar si es primo:\n"); scanf("%d",&num);
for(i=2, res=1;i<(num/2),res!=0;i++) res=num%i;
if((num==2)||(num==1)) res=1;
if(res==0) printf("\nEl numero %d NO es primo\n",num);
else printf("\nEl numero %d es primo\n",num);
}
|
|
|
|
|
En línea
|
|
|
|
opterman
Desconectado
Mensajes: 87
|
Nas a todos TheMaker tu error es muy evidente, en el while pones que sigua el bucle mientras sea b>1, pero si se da el caso de que b == 1 el bucle no sigue y es por eso que el 2 no lo detecta como primo , para eso está el operador >= mayor o igual
Saludos Opterman
|
|
|
|
|
En línea
|
|
|
|
(*<>*) HaCKinG_SkrIP
Desconectado
Mensajes: 207
|
Nas a todos TheMaker tu error es muy evidente, en el while pones que sigua el bucle mientras sea b>1, pero si se da el caso de que b == 1 el bucle no sigue y es por eso que el 2 no lo detecta como primo , para eso está el operador >= mayor o igual
Saludos Opterman
b>=1 ==> b>0 No es lo mismo?
|
|
|
|
|
En línea
|
|
|
|
TheMaker
Desconectado
Mensajes: 513
|
anda que leis jaaj, mi primer code era una caca si seguis leyendo a la mitad del post pongo mi code que ya si funciona jeje
|
|
|
|
|
En línea
|
Gibe money please or I report you
|
|
|
|
|