/// <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); }
/// <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); }