Gh057,
El problema esta en que no solo he de encontrar el numero primo mas próximo, sino que he de encontrar el numero primero mas próximo que contenga el que me dan inicialmente. Es decir si el numero inicial es 001 mi programa debe retornar 3001 que es el numero primo mas próximo y contiene 001. De la manera que propone Orubatosu el coste del algoritmo es lineal, ya que he de ir incrementando de uno en uno y mirar si es primero o no y si contiene el numero inicial o no.
Creo que la manera correcta y mas eficiente es generar los numeros que contienen 001 y mirar si son primeros. Por lo tanto si inicial = 001 el primer valor a comprobar es 1001, despues 2001, etc
Mi problema es que no se generar numeros sucesivamente mas grandes que contengan el valor inicial.
Muchas Gracias de nuevo!!
Me temo que no te sigo...
Supongamos que el numero "x" es 001
Capturamos el dato como string, dado que el primer caracter es un "0", aplicamos un "1" antes. La cantidad de ceros es irrelevate, si el primer es un "0" el que haya mas no nos importa.
Lo convertimos a decimal (es algo relativamente sencillo, si no te aclaras con eso nos lo dices)
Suponiendo que fuera "001", el numero a partir del que buscar sería "1001"
Como 1001 no es primo, y dado que si le sumamos "1" perdemos esa condición de que "contenga 001" debes de probar incrementando el lado izquierda hasta 9, si no se da el caso, a partir de ahí y "contando hacia arriba" debes de recuperar nuevamente el 1001 y añadir una unidad a la derecha "10011" y a partir de ahí ya supongo que puedes ir añadiendo 2 en cada ciclo
Esto asumiendo que los ceros a la izquierda son significativos, en caso contrario la cosa cambia, ya que podemos hacer entonces algo diferente.
Dado que no sabemos la longitud de "x", no podemos aplicar reglas generales, y la "fuerza bruta" es una opción... simplemente añades 2 a cada ciclo y compruebas que el numero resultante contiene la secuencias que buscas, y que es primo.
Dado que la comprobación de si es primo es mas rápida, sería la que haría primero, la segunda sería comprobar si el numero en cuestión contiene "x" (que recordemos puede ser de una, dos o varias cifras). Para eso deberías de convertirlo en un string y comprobar si la cadena que buscas está dentro, algo sencillo, ya que string tiene una función para encontrar una cadena dentro de otra (find)
A todo esto, digo "es mas rápida" un poco de cabeza, quizás habría que hacer una comprobación para ver cual de las dos comprobaciones es mas rápida para ponerla primero a la hora de evaluar el número.