Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NicoSanhueza en 7 Mayo 2018, 17:00 pm



Título: AYUDA! Verificar si un numero es par/impar , compuesto/primo
Publicado por: NicoSanhueza en 7 Mayo 2018, 17:00 pm
Buenos dias a todos, espero que esten bien
Tengo un problema con lo que he programado. El ejercicio me pide que el usuario ingrese un numero y se debe verificar todos los numeros, desde el 1 hasta el ingresado, si son par/impar    compuesto/primo.
El error es que al compilar me dice que el 9 es impar y PRIMO, cosa de que el 9 es divisible por 1,3y9 lo cual seria un numero compuesto.

#include <stdlib.h>
#include <stdio.h>

int main()
{
  int n,i,k,cont=0;

  printf("Ingrese un numero:");
  scanf("%d",&n);

  for(i=1;i<=n;i++)
 {
   if(i%2==0)
   {
       if(i==2)
       {
           printf("El numero 2 es par y primo\n");
       }
       else
       {
           printf("El numero %d es par y compuesto\n",i);
       }
   }

   else
   {
       if(i==1)
       {
           printf("El numero 1 es impar\n");
       }
       else
     {
           for(k=2;k<i;k++)
           {
               if(i%k==0)
               {
                   cont++;
               }

          }
           if(cont>2)
            {
           printf("El numero %d es impar y compuesto\n",i);
            }
          else
            {
          printf("El numero %d es impar y primo\n",i);
            }
     }
   }
}
}

Creo que el error deberia estar en el ultimo for que utilize, cuando empieza el analisis de los impares.

GRACIAS DE ANTEMANO :)


Título: Re: AYUDA! Verificar si un numero es par/impar , compuesto/primo
Publicado por: Serapis en 7 Mayo 2018, 17:51 pm
mmm... es cansino, que una y otra vez se pregunten las mismas cosas y el que pregunta no se tome la más mínima molestia de usar el buscador.

De hecho, lo procedente para los que empiezan, es tomarse la molestia de tomar pápel y lápiz (o una pizarra sea del tipo que sea) y plantear la solución ahí, y sólo cuando se tenga solventada con la lógica correcta es cuando resulta pertinente, ponerse a escribir código.

Escribir código al vuelo, es algo que solo se puede hacer cuando uno tiene solvencia cosa que (en general) se adquiere con la práctica (y solo cuando el problema tiene una envergadura limitada).

Para terminar te remarco, que la función módulo es muy útil pero cuando el valor por el que se 'modula' es una potencia de 2, entonces existe la alternativa equivalente de usar el AND, que es una operación atómica (nativa del procesador), y por tanto mucho más veloz que dividir y restar...

Así:
x modulo 2
es equivalente a:
x and 1

x modulo 4
x and 3

x modulo 8
x and 7

En general pués:
x modulo 2^n
x and (2^n)-1