domingo, 22 de abril de 2012

Comprobar si un número es primo en Lenguaje C

Un número primo es aquel que solo es divisible entre 1 y él mismo.
Con lo cual solo tiene 2 divisores.

Así que tendremos que usar el ejercicio anterior de calcular los divisores de un número, y comprobar que solo sean dos para que el número sea primo.

{

int num1,i,a;

a=0; */Esta variable la vamos a usar para contar los divisores del número introducido, la inicializamos a 0*/

printf("Introduce un numero: ");
scanf("%d",&num1);

for(i=1;i<=num1;i++)
{
    if(num1%i==0) // si num1 módulo de i es 0, incrementamos a en 1.
    a++;
}


if(a==2); /*Si al final del bucle, a vale 2, el número es primo, porque tiene solamente 2 divisores.
{
    printf("El número es primo");
}
else
{
    printf("El número no es primo");
}


}



68 comentarios:

  1. Hola, gracias por el programa, pero queria saber si se puede hacer sin bucles.
    Saludos y gracias

    ResponderEliminar
    Respuestas
    1. #include
      #include
      #include

      int main()
      {

      int i;//i variable que representa al numero


      puts("Programa, dado un numero conocer si es primo o no");
      scanf("%d",&i);

      if(i%2!=0 && i%3!=0 && i%5!=0 && i%7!=0 || i==2 || i==3 || i==5 || i==7)
      {
      printf("El número es primo: %d\n\n",i);

      }

      else
      {
      printf("El numero no es primo: %d\n\n",i);
      }

      system("pause");
      return 0;

      }

      Eliminar
    2. Y yo que pensaba que 169 no era un número primo… bueno, que le den al 13, quién lo quiere

      Eliminar
    3. Gracias por la ayuda, te interesa ser profesor de innformatica en la ETSE, te intercambio por mi profesoraa.

      Eliminar
    4. como lo puedo lograr el codigo para indicar numero primo hasta 1000!! una ayuda :)

      Eliminar
  2. Hola.

    No conozco otro método.

    Creo que es necesario recorrer los números anteriores al introducido, para ver si son o no divisores de este, y al final comparar.

    Un saludo.

    ResponderEliminar
  3. No hace falta recorrer todo los numero este código es mucho más optimo:

    int primo(int p){
    int i;

    if(p<2) return 0;
    for(i=2;i<=sqrt(p);i++) if(p%i == 0) return 0;
    return 1;
    }

    ResponderEliminar
    Respuestas
    1. mm pues esta mal porqeu hay muchos return y eso afectaria al programa.

      Eliminar
    2. que significa if(p<2) . es lo unico

      Eliminar
    3. No cumple para 6.
      Iterando hasta su raíz se deja de lado al factor 3 :v

      Eliminar
    4. muchos return afectan? donde aprendiste a programar?!

      Eliminar
    5. que algoritmo es este??? Es muy bueno

      Eliminar
    6. señor anónimo yo estoy estudiando programación y mi profesor también dice que muchos return afectan al programa y que cualquier programador sabe eso xD. De nada por hacerte mas sabio.

      Eliminar
    7. No entiendo porque afectaría al programa. Un return es una instrucción simple y si hablamos de la complejidad del algoritmo los return se quedan en complejidad constante, a diferencia de digamos un for en función de n que tendría una complejidad lineal como mínimo

      Eliminar
    8. Este comentario ha sido eliminado por el autor.

      Eliminar
  4. alguien sabe como hago para diferenciar entre numero y letras en C?, utilizando dev C++

    ResponderEliminar
  5. y si quiero hacerlo con recursividad?

    ResponderEliminar
  6. HOLA SOY NUEVO AQUI PERO QUIERO SA BER COMO DIFERENCIO SI UN NUMERO ES PRIMO O NO EN LENGUAJE C++

    ResponderEliminar
    Respuestas
    1. #include
      using namespace std;
      int main()
      {

      int num1,i,a;

      a=0; /*Esta variable la vamos a usar para contar los divisores del número introducido, la inicializamos a 0*/

      printf("Introduce un numero: ");
      scanf("%d",&num1);

      for(i=1;i<=num1;i++)
      {
      if(num1%i==0) // si num1 módulo de i es 0, incrementamos a en 1.
      a++;
      }
      /*Si al final del bucle, a vale 2, el número es primo, porque tiene solamente 2 divisores.*/


      if(a==2)
      {
      printf("El número es primo");
      }
      else
      {
      printf("El número no es primo");
      }


      }

      Eliminar
    2. y para imprima todos los numeros primos hast el numero que seleccione
      por ejemplo:
      si selecciono 10
      que imprima el 2 3 5 7
      como seria

      Eliminar
    3. solo agrega un
      printf("%d", num);

      antes de a++;

      Eliminar
  7. si le cambian el ultimo if(a<=2), les tomara en cuanta al 1 como primo porque a mi no me lo leia como primo

    ResponderEliminar
    Respuestas
    1. Con cambiar el ultimo if y ponerlo de la siguiente forma --> if (a%2) --> asi funciona ^^

      Eliminar
    2. EL numero 1 no es primo jeje. En secundaria aveces te dicen que si, pero esto no es cierto.
      "Un número primo es un número natural mayor que 1 que tiene únicamente dos divisores distintos: él mismo y el 1"

      Eliminar
    3. El 1 no es número primo, ya quela definición de primo es todo numero mayor que 1 y que solo es divisible por él mismo y la unidad.

      Eliminar
  8. hola me podrías explicar como es que funciona en memoria.

    ResponderEliminar
  9. Aqui un metodo que nos dice si un numero es primo o no. Se tiene que hacer el include de la libreria 'cmath' para que se pueda llamar correctament a la funcion 'sqrt' (raiz cuadrada), esto es "#include". Espero que le sirva a alguien. Saludos!

    bool es_numero_primo(int n) {
    bool es_primo = true;
    int raiz = int(sqrt(n));
    for (int i=2; es_primo and i<=raiz; ++i) {
    if (n%i == 0) es_primo = false;
    }
    return es_primo;
    }

    ResponderEliminar
  10. y para imprima todos los numeros primos hast el numero que seleccione
    por ejemplo:
    si selecciono 10
    que imprima el 2 3 5 7
    como seria

    ResponderEliminar
  11. hasta el momento si me queda claro como saber si un solo numero, es primo o no, o si saber si hasta tal numero cuantos primos hay, pero para ingresar N cantidad de números y que me diga cuales son y no so primos en C++, como seria??

    ResponderEliminar
  12. hasta el momento si me queda claro como saber si un solo numero, es primo o no, o si saber si hasta tal numero cuantos primos hay, pero para ingresar N cantidad de números y que me diga cuales son y no so primos en C++, como seria??

    ResponderEliminar
  13. //Caracas, 07/08/2015
    /*les dejo un codigo que hice para calcula los numeros primos hasta el 1000 con la posibilidad de incrementar o decrementar el contador:*/

    #include

    int main() {
    int primo = 2; // por convencion el uno no es un numero primo ni compuesto

    for(int i=2; i <= 1000; i++){

    for(int j=2; j <= i-1; j++){

    primo = i;

    if( i % j == 0 ){
    primo = 0;
    break;

    }//if
    }//for

    if(primo != 0)
    printf("%d\n", primo);

    }//for

    return 0;
    }//main

    ResponderEliminar
  14. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  15. 6. Escribir un programa que nos pida por pantalla dos números enteros y nos muestre los números primos que hay entre ellos.

    Por favor me pueden ayudar con este ejercicio.

    Gracias

    ResponderEliminar
  16. HOLA ME GUSTO MUCHO TU PROGRAMA YO LO ESTOY INTENTANDO HACER CON UN WHILE PERO EL 1 Y EL 2 NO ME LOS RECONOCE NO SE SI ME PODRIAS EXPLICAR COMO HACERLO

    ResponderEliminar
  17. Holaaa hay hay alguien que me pueda colaborar? El usuario ingresa un numero N y el programa debe contar cuantos números primos hay por debajo de el y mostrar el resultado en pantalla. En c++, por fa

    ResponderEliminar
  18. Hola alguien sabe hacerlo con Python??

    ResponderEliminar
  19. Hola alguien sabe hacerlo con Python??

    ResponderEliminar
    Respuestas
    1. a = 0
      i = 1
      num1 = int(input("Introduce un número: "))
      while num1 >= i:
      if (num1 % i) == 0:
      a+= 1
      i+= 1
      continue
      else:
      i+= 1
      continue
      if a == 2:
      print(str(num1) + " es primo")
      else:
      print(str(num1) + " no es primo")

      Es sencillo, es sólo adaptar de C a Python, no hay mucha diferencia

      Eliminar
    2. Si, faltan los indentados, no han salido

      Eliminar
  20. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  21. #include iostream

    using namespace std;

    bool esPrimo(unsigned long n) {
    bool valor = true;
    //arranca desde 2 y comprueba hasta n-1
    for (int i = 2; i < n; ++i) {
    if (n % i == 0) {
    valor = false;
    break; /* si encuentra un divisor para el ciclo, es mas optimo */
    }
    }
    return valor;
    }

    int main() {
    unsigned long num;
    string str;
    cin >> num;
    if (esPrimo(num))
    str = "Es primo!";
    else
    str = "Es compuesto";
    cout << str << endl;

    return 0;
    }

    ResponderEliminar
  22. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  23. No usen " i = sqrt(x) " ese da mal la respuesta
    Usen esto " i*i = x " es lo mismo si se dan cuenta, pero este si les va a dar la respuesta correcta :)

    Ahí va mi código...

    #include bits/stdc++.h //Añade todas las librerías, va entre los símbolos de mayor y menor, solo que al publicarlo no aparecen
    using namespace std;

    bool primo(int x){

    if(x==2){return true;}
    else if(!(x&1)){return false;} //Si es par, ya no es primo, excepto el 2, eso ya está en el if de arriba
    int i=3;
    for(;i*i<=x;i+=2){
    if(x%i==0){return false;}
    }
    return true;
    }

    int main(){
    int n; scanf("%d",&n);
    if(primo(n)){printf("Es primo");}

    else{printf("No es primo");}

    return 0;
    }

    ResponderEliminar
  24. #include
    #include
    int factorial(int num)
    {
    //factoritzar numeros
    int resultat=1;
    int i;
    for(i=1;i<=num;i++)
    {
    resultat=resultat*i;
    }
    return(resultat);
    }
    int suma(int num[10])
    {
    //sumar llistes de numeros
    int resultat=0;
    int i,j;
    for(i=0;i<10;i++)
    {
    resultat+=num[i];
    }
    return (resultat);
    }
    void omplirllista(int llista[10])
    {
    int i;
    for(i=0;i<10;i++)
    {
    printf("Entrar numero (%d): ",i+1);
    scanf("%d",&llista[i]);
    }
    }
    void mostrarllista(int llista[10])
    {
    int i;
    for(i=0;i<10;i++)
    {
    printf("%d ",llista[i]);
    }
    printf("\n");
    }
    bool EsPrimer(int num)
    {
    int i=2;
    while(i<num&&num%i!=0)
    {
    i++;
    }
    return(i==num);
    }
    int numprimers(int llista[10])
    {
    int i,resultat=0;
    for(i=0;i<10;i++)
    {
    if(EsPrimer(llista[10]))
    resultat++;
    }
    return(resultat);
    }
    int main()
    {
    int i,n,f,llista[10],llista2[10],llista3[10],s,s2,s3,p;
    //demanar numero per factoritzar
    //printf("Escriu valor:");
    //scanf("%d",&n);
    //f=factorial(n);
    //donar resultat factoritzat
    //printf("Factorial es: %d\n",f);
    //demanar llista
    omplirllista(llista);
    //omplirllista(llista2);
    //omplirllista(llista3);
    /* mostrarllista(llista);
    mostrarllista(llista2);
    mostrarllista(llista3);
    //cridar a la SUMA
    s=suma(llista);
    s2=suma(llista2);
    s3=suma(llista3);
    //escriure la suma
    printf("La suma es: %d\n",s);
    printf("La suma2 es: %d\n",s2);
    printf("La suma3 es: %d\n",s3);
    */
    p=numprimers(llista);
    printf("Numeros primers: %d\n",p);
    }

    ResponderEliminar
  25. #include
    void main(void){
    int n, i=2, primo=1;
    printf("Ingrese un entero > 0: ");
    scanf("%d", &n);
    for(;i<n && i*i <= n && primo ; i++)
    if(n%i==0) primo=0;
    if(primo) printf("%d es primo\n", n);
    else
    printf("%d no es primo\n", n);
    }

    ResponderEliminar
  26. Como sacr en diagrana de flujo prueba de escritorio y codificacion en el lenguaje c++ los siguientes...identificar entre 2 personas quien es el mas alto y sumatoria de los siguienetes elementos 3÷1+6÷3+9÷5+12÷7

    ResponderEliminar
  27. Como se puede hacer el de los números primo sin bucles en c++

    ResponderEliminar
  28. Como se hace el de los números primos sin bucles en c++.

    ResponderEliminar
  29. me podrian auydar a resolver lo sig. me es urgente
    QUE PIDA N NUMEROS Y QUE ESTOS SEAN PRIMOS Y QUE IMPRIMA LA SUMA DE ESTOS

    ResponderEliminar
  30. tengo una duda

    pero bueno mi ejercicio dice asi, osea yo ingreso un numero n y decirme cuantos numeros primos hay hasta el valor de n

    ResponderEliminar
  31. Bueno tengo una forma sin la necesidad de usar bucle y funciona, pero no se si esta bien estructurado o considerado optimo.
    #include

    int main(){
    int num;
    printf("ESCRIBE UN NUMERO : ");
    scanf("%d",&num);
    while(num!=0){
    if(num==2){
    printf("EL NUMERO ES PRIMO");
    }
    else if(num==1){
    printf("EL NUMERO NO ES PRIMO");
    }
    else if(num%2==0){
    printf("EL NUMERO NO ES PRIMO");
    }
    else{
    printf("EL NUMERO ES PRIMO");
    }
    printf("\nESCRIBE UN NUMERO : ");
    scanf("%d",&num);
    }
    return 0;
    }

    ResponderEliminar
  32. quiero que alguien me corrija si estoy mal.

    ResponderEliminar
  33. Estás mal. Según tu algoritmo, el número 9 sería primo, lo cual no es, ya que es divisible entre 3. Yo te recomendaría hacer lo siguiente:
    Lee un número -> x
    Dividelo entre 2 -> y=x/2
    Ahora haz un for de 2 hasta y -> for(int i=2, < i=y, i++)
    Y dentro de ese for divide x entre cada i, y mira se te da residuo 0 -> if(x%i == 0):
    Y si ese if the sale verdadero, pues no es primo -> print("No es primo"); break;
    Y si llegas hasta el final de tu for, sin haber caído como verdadero en ese if, pues encontraste un primo.

    Puede que no me haya explicado muy bien :P pero el punto también es que tú lo hagas solo. Así que espero que lo logres :P

    ResponderEliminar
  34. Realice un algoritmo que permita saber si un numero es primo o no utilizando la práctica de programación estructurada y luego realice el mismo algoritmo de forma modular con funciones. Responda ¿Cuál sería el algoritmo más óptimo y por qué

    ResponderEliminar
  35. alguien me ayuda con esto por fa
    Realice un algoritmo que permita saber si un numero es primo o no utilizando la práctica de programación estructurada y luego realice el mismo algoritmo de forma modular con funciones.

    ResponderEliminar
  36. EI CHICOS Y EL VAR_NUMERO?

    ResponderEliminar