Destacados

Loading...

martes, 17 de enero de 2012

Numeros Primos en C#

Bueno ahora vamos hacer algo muy común, Normalmente este es un ejercicio de programación que nos ayuda a comprender mejor la lógica de los problemas y comúnmente usado por los profesores, para tal enseñanza me refiero a calcular si un numero es primo o no?.

Hoy vamos hacer el programa para ver si un número ingresado por consola es primo o no.

Primero definamos el concepto de número primo:

Un numero primo es aquel numero que solo es divisible por 1 y pos si mismo, de lo contrario este número solo será un múltiplo de otro.

También cabe recordar que los números primos son Enteros y los decimales no entran en esta categoría.

Si quieres tener un mejor concepto de esto pueden ver en Wiki Numeros Primos.

Ahora en C# voy hacer  tres metodos los cuales van hacer lo mismo (Ver si el numero es primo o no), pero cada metodo va hacer mejor que el siguiente y mejor me refiero a mas optimo, bueno a qui les dejo el codigo si tienen alguna duda me comentan...=)

    class Program
    {
        
        static void Main(string[] args)
        {
            //pedimos el numero por parametro
            Console.WriteLine("Escriba el numero a identificar si es primo o no");

       //creamos la variable, convertimos el parámetro a entero ya que todo dato q pedimos entra como string

            int aux= Convert.ToInt32(Console.ReadLine());
        
  //llamamos el método que optimizamos
            verPrimo1(aux);
            verPrimo2(aux);
            verPrimo3(aux);

            Console.ReadKey();
        }

        //Este el método normal, solo veremos  hay algún numero mayor a 1 y menor q si mismo que al aplicarle el modulo "%" 
         // o si el residuo de la división es cero, esto significara que es un múltiplo de otro número y por lo tanto no es primo
         // Si con el primero no coincide ira incrementado de 1 en 1 hasta llegar a  si mismo -1
         


        public static void verPrimo1(int num) 
        {
            //una variable que identifica cuando es primo
            bool primo = false;

            //el dos es considerado como primo, por lo cual si es 2 no tendremos la necesidades meterlo en el ciclo

            if (num != 2)
            {

                //vamos hacer un ciclo, para tratar de dividir por todos los numero y determinar si es primo
                for (int i = 2; i < num; i++)
                {
                    if (num % i == 0)
                    {
                        primo = true;
                        Console.WriteLine("El numero No es primo");
                        break;
                    }
                }

            }
            //verificamos la variable en caso tal que haya recorrido y no encuentre ninguno entonces es primo
            if (!primo)
            {
                Console.WriteLine("El numero es primo");
            }
        }


        /*lo que se hará en este método es verificar si el número es primo, Pero optimizando la manera en cómo se busca
        *Si observamos el código anterior nos damos cuenta que se tiene que de 1 en 1 hasta encontrar el indicado en este método vamos a variar
        *ahora vamos a ir solo hasta la mitad del número, debido  a que por lógica la mitad superior es múltiplo de la mitad inferior
        * si solo comparamos con la mitad inferior mas 1 sería más que suficiente.*/

        public static void verPrimo2(int num)
        {
            bool primo = false;

            if (num != 2)
            {

                //vamos hacer un ciclo, para tratar de dividir por todos los numero y determinar si es primo
                for (int i = 2; i < (num/2)+1 ; i++)
                {
                    if (num % i == 0)
                    {
                        primo = true;
                        Console.WriteLine("El numero No es primo");
                        break;
                    }
                }

            }
            //verificamos la variable en caso tal que haya recorrido y no encuentre ninguno entonces es primo

            if (!primo)
            {
                Console.WriteLine("El numero es primo");
            }

        }

        //lo que aremos en esta optimización es debido a q todos los números Primos son impares entonces ya no tendremos que ir de 1 en 1
        // aremos solo q divida entre impares empezando en 1  pero sin tener efecto e ir incrementándolo de dos en dos


        public static void verPrimo3(int num)
        {
            bool primo = false;

            if (num != 2)
            {

                //vamos hacer un ciclo, para tratar de dividir por todos los numero y determinar si es primo
                for (int i = 1; i < (num / 2) + 1; i=i+2)
                {
                    if (i != 1)
                    {
                      if (num % i == 0)
                         {
                             primo = true;
                             Console.WriteLine("El numero No es primo");
                             break;
                         }
                    }
                }

            }
            //verificamos la variable en caso tal que halla recorrido y no encuentre ninguno entonces es primo
            if (!primo)
            {
                Console.WriteLine("El numero es primo");
            }

        }
    }

3 comentarios:

Alguna duda?