コード例 #1
0
        /// <summary>
        /// Devuelve el primer número primo que sigue al valor de esta instancia. Si por alguna razón no es posible
        /// determinar un número primo que lo sucede, se devuelve el valor -1.
        /// </summary>
        public static int NextPrime(this int i)
        {
            // Caso base.
            if (i < 2)
            {
                return(2);
            }

            // Delimitar.
            int limit = i + 1000;

            if (limit <= 2)
            {
                limit = int.MaxValue - 1;
            }

            int currentNumber = i;

            if ((i % 2) == 0) // Si el valor de esta instancia es par, corregir con el siguiente impar.
            {
                currentNumber++;
            }

            for (; currentNumber < limit; currentNumber += 2)
            {
                if (IntegerExtensions.IsPrime(currentNumber))
                {
                    return(currentNumber);
                }
            }

            return(-1);
        }
コード例 #2
0
        /// <summary>
        /// Devuelve el primer número primo que precede al valor de esta instancia. Si no existe ningún número primo
        /// que lo precede, se devuelve el valor -1.
        /// </summary>
        public static int PreviousPrime(this int i)
        {
            // Casos base.
            if (i <= 2)
            {
                return(-1);
            }
            if (i <= 3)
            {
                return(2);
            }
            if (i <= 5)
            {
                return(3);
            }

            // Comprobar si el valor ya es un número primo.
            //if (IntegerExtensions.IsPrime(i))
            //    return i;

            // Delimitar.
            int limit = i - 1000;

            if (limit <= 2)
            {
                limit = 2;
            }

            int currentNumber = i;

            if ((i % 2) == 0)
            {
                currentNumber--;
            }

            for (; currentNumber > limit; currentNumber -= 2)
            {
                if (IntegerExtensions.IsPrime(currentNumber))
                {
                    return(currentNumber);
                }
            }

            return(-1);
        }