En /math/33094/deleting-any-digit-yields-a-prime-is-there-a-name-for-this se hace la siguiente pregunta. ¿Cuántos números primos hay que siguen siendo primos después de eliminar cualquiera de sus dígitos? Por ejemplo, 719
es tan importante como obtienes 71
, 19
y 79
. Si bien esta pregunta no está resuelta, pensé que sería un buen desafío de codificación.
Tarea. Proporcione el primo más grande que pueda encontrar que sigue siendo primo después de eliminar cualquiera de sus dígitos. También debe proporcionar el código que lo encuentra.
Puntuación. El valor de la prima que das.
Puede usar cualquier lenguaje de programación y bibliotecas que desee siempre que sean gratuitas.
Para empezar, 99444901133
es el más grande dado en la página vinculada.
Límite de tiempo. Aceptaré la respuesta correcta más grande dada exactamente una semana después de la primera respuesta correcta más grande que la 99444901133
dada en una respuesta.
Puntuaciones hasta ahora.
Python (primo)
4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111
J (randomra) (Esta respuesta comenzó el temporizador de una semana el 21 de febrero de 2013).
222223333333
9901444133
(una eliminación de uno 9) no es primo (7 x 1414492019
). Sin embargo, su ejemplo anterior era correcto.Respuestas:
274 dígitos
Esto tomó alrededor de 20 horas de tiempo de CPU para encontrar, y aproximadamente 2 minutos por cebado para probar. Por el contrario, la solución de 84 dígitos se puede encontrar en unos 3 minutos.
84 dígitos
77777777999999999999999777777777 (32 dígitos)
66666666666666622222222222222333 (32 dígitos)
647777777777777777777777777 (27 dígitos)
44444441333333333333 (20 dígitos)
999996677777777777 (18 dígitos)
7777 ( 18 dígitos 77 ) 1577
Recomiendo esta herramienta si desea confirmar la originalidad: D. Alpern's ECM Applet
También se utiliza un enfoque repdigit, que parece ser el enfoque con mayor probabilidad de encontrar valores grandes. El siguiente script omite algorítmicamente la mayoría de los números o truncamientos, lo que dará como resultado múltiplos de 2, 3, 5 y ahora 11 c / o PeterTaylor (su contribución aumentó la eficiencia en aproximadamente un 50%).
my_math.py
se puede encontrar aquí: http://codepad.org/KtXsydxKAlternativamente, también puede usar la
gmpy.is_prime
función: Proyecto GMPYAlgunas pequeñas mejoras de velocidad como resultado de la creación de perfiles. La comprobación de primalidad para el más largo de los cuatro candidatos se ha movido al final,
xrange
reemplazarange
ylong
reemplaza losint
tipos de yeso.int
parece tener una sobrecarga innecesaria si la expresión evaluada da como resultado along
.Reglas de divisibilidad
Deje que N sea un número entero postitive de la forma de un ... ab ... bc ... c , donde un , b y c se repiten dígitos.
Por 2 y 5
: para evitar la divisibilidad entre 2 y 5 , c puede no estar en el conjunto [0, 2, 4, 5, 6, 8] . Además, si b es miembro de este conjunto, la longitud de c no puede ser inferior a 2.
Por 3
: si N = 1 (mod 3) , entonces N puede no contener ninguno de [1, 4, 7] , ya que la eliminación de cualquiera de estos resultados trivialmente daría como resultado un múltiplo de 3 . Del mismo modo para N = 2 (mod 3) y [2, 5, 8] . Esta implementación utiliza una forma ligeramente debilitada de esto: si N contiene uno de [1, 4, 7] , puede que no contenga ninguno de [2, 5, 8] , y viceversa. Además, N no puede consistir únicamente en [0, 3, 6, 9] . Esto es en gran medida una declaración equivalente, pero sí permite para algunos casos triviales, por ejemplo un , b , y ccada uno se repite un múltiplo de 3 veces.
Por 11
- Como señala PeterTaylor , si N tiene la forma aabbcc ... xxyyzz , es decir, consiste solo en dígitos repetidos un número par de veces, es divisible trivialmente por 11 : a0b0c ... x0y0z . Esta observación elimina la mitad del espacio de búsqueda. Si N es de longitud impar, entonces la longitud de un , b y c deben ser todos impar, así (reducción del espacio de búsqueda 75%), y si N es de longitud incluso, entonces sólo uno de una , b o c pueden ser aún de longitud (reducción del espacio de búsqueda del 25%).
- conjetura: Si abc es un múltiplo de 11 , por ejemplo 407 , a continuación, todas las repeticiones impares de un , b y c también se múltiplos de 11 . Esto cae fuera del alcance de la divisibilidad anterior por 11 regla; de hecho, solo las repeticiones impares están entre las que están explícitamente permitidas. No tengo una prueba de esto, pero las pruebas sistemáticas no pudieron encontrar un contraejemplo. Compare: 444077777 , 44444000777 , 44444440000077777777777 , etc.
Cualquiera puede sentirse libre de probar o refutar esta conjetura.Aditsu ha demostrado que esto es correcto.Otras formas
2 juegos de dígitos repetidos Los
números de la forma que randomra buscaba , a ... ab ... b , parecen ser mucho más raros. Solo hay 7 soluciones de menos de 10 1700 , la mayor de las cuales tiene 12 dígitos de longitud.
4 conjuntos de dígitos repetidos Los
números de esta forma, a ... ab ... bc ... cd ... d , parecen estar más densamente distribuidos que los que estaba buscando. Hay 69 soluciones de menos de 10 100 , en comparación con las 32 que usan 3 juegos de dígitos repetidos. Los que están entre 10 11 y 10 100 son los siguientes:
Hay un argumento heurístico simple de por qué este debería ser el caso. Para cada longitud digital, hay una serie de conjuntos repetidos (es decir, 3 conjuntos repetidos, o 4 conjuntos repetidos, etc.) para los cuales el número esperado de soluciones será el más alto. La transición se produce cuando el número de posibles soluciones adicionales, tomadas como una relación, supera la probabilidad de que el número adicional a verificar sea primo. Dada la naturaleza exponencial de las posibilidades de verificación, y la naturaleza logarítmica de la distribución de números primos, esto sucede relativamente rápido.
Si, por ejemplo, quisiéramos encontrar una solución de 300 dígitos, verificar 4 conjuntos de dígitos repetidos sería mucho más probable que produjera una solución que 3 conjuntos, y 5 conjuntos serían aún más probables. Sin embargo, con la potencia informática que tengo a mi disposición, encontrar una solución mucho más grande que 100 dígitos con 4 juegos estaría fuera de mi capacidad, y mucho menos 5 o 6.
fuente
d^x e^y f^z
requiere que al menos dos de las longitudes de secuencia sean impares para evitar la divisibilidad entre 11. No sé siis_prime
rechazará múltiplos de 11 lo suficientemente rápido como para que no valga la pena tenerlo en cuenta explícitamente.(na&1)+(nb&1)+(nc&1) > 1
es lo suficientemente simple como para que sea más rápido. ¡Espera un minuto, esto puede hacer que las ramas llenas se corten en corto! Sina
es par ynb + nc
es impar, entonces uno de ellos[nb, nc]
debe ser necesariamente par, y puede pasar al siguientena
.2
.1
significa que es probablemente sólo un número primo222223333333 (12 dígitos)
Aquí solo busqué aa..aabb..bb formato de hasta 100 dígitos. Solo otros golpes son 23 37 53 73 113 311.
Código J (limpiado) (lo siento, no hay explicación):
fuente
Editar: Alguien ya hizo un análisis muuuucho más profundo que yo aquí.
No es una solución, sino una estimación aproximada del número de soluciones de n dígitos.
Generando código J
fuente
Javascript (fuerza bruta)
Aún no ha encontrado un número mayor
http://jsfiddle.net/79FDr/4/
Sin una biblioteca bigint, javascript está limitado a enteros
<= 2^53
.Como es Javascript, el navegador se quejará si no liberamos el hilo de ejecución para que la interfaz de usuario se actualice, como resultado, decidí rastrear dónde está el algoritmo en su progresión en la interfaz de usuario.
fuente
Se publicó un enlace a un análisis del problema, pero pensé que le faltaban algunas cosas. Veamos los números de m dígitos, que consisten en k secuencias de 1 o más dígitos idénticos. Se demostró que si dividimos los dígitos en los grupos {0, 3, 6, 9}, {1, 4, 7} y {2, 5, 8}, una solución no puede contener dígitos tanto del segundo como del tercer grupo , y debe contener 3n + 2 dígitos de uno de estos grupos. Al menos dos de las k secuencias deben tener un número impar de dígitos. De los dígitos {1, 4, 7} solo 1 y 7 pueden ser el dígito más bajo. Ninguno de {2, 5, 8} puede ser el dígito más bajo. Entonces hay cuatro (1, 3, 7, 9) o dos (3, 9) opciones para el dígito más bajo,
¿Cuántos candidatos hay? Tenemos m dígitos divididos en k secuencias de al menos 1 dígito. Hay (m - k + 1) sobre (k - 1) formas de elegir la longitud de estas secuencias, que es aproximadamente (m - 1.5k + 2) ^ (k - 1) / (k - 1). Hay 2 o 4 opciones para el dígito más bajo, seis en total. Hay seis opciones para los otros dígitos, excepto 36/7 opciones para el dígito más alto; el total es (6/7) * 6 ^ k. Hay 2 ^ k formas de elegir si la longitud de una secuencia es par o impar; k + 1 de estos están excluidos porque ninguno o solo uno es impar; multiplicamos el número de opciones por (1 - (k + 1) / 2 ^ k), que es 1/4 cuando k = 2, 1/2 cuando k = 3, 11/16 cuando k = 4, etc. El número de los dígitos del conjunto {1, 4, 7} o {2, 5, 8} deben ser 3n + 2, por lo que el número de opciones se divide por 3.
Multiplicando todos estos números, el número de candidatos es
o
El candidato en sí y los k números que se crean al eliminar un dígito deben ser primos. La probabilidad de que un número entero aleatorio alrededor de N sea primo es aproximadamente 1 / ln N. La probabilidad de un número aleatorio de m dígitos es aproximadamente 1 / (m ln 10). Sin embargo, los números aquí no son aleatorios. Todos han sido elegidos para no ser divisibles por 2, 3 o 5. 8 de los 30 enteros consecutivos no son divisibles por 2, 3 o 5. Por lo tanto, la probabilidad de ser primo es (30/8) / (m ln 10) o aproximadamente 1.6286 / m.
El número esperado de soluciones es sobre
o para grandes m aproximadamente
Para k = 2, 3, 4, ... obtenemos lo siguiente:
De k = 10 en adelante, el número se vuelve más pequeño nuevamente.
fuente