274 dígitos
4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111
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
444444444444444444444444444444444444444444444444441111111113333333333333333333333333
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%).
from my_math import is_prime
sets = [
(set('147'), set('0147369'), set('1379')),
(set('369'), set('147'), set('1379')),
(set('369'), set('0369'), set('17')),
(set('258'), set('0258369'), set('39')),
(set('369'), set('258'), set('39'))]
div2or5 = set('024568')
for n in range(3, 100):
for sa, sb, sc in sets:
for a in sa:
for b in sb-set([a]):
bm1 = int(b in div2or5)
for c in sc-set([b]):
if int(a+b+c)%11 == 0: continue
for na in xrange(1, n-1, 1+(n&1)):
eb = n - na
for nb in xrange(1, eb-bm1, 1+(~eb&1)):
nc = eb - nb
if not is_prime(long(a*(na-1) + b*nb + c*nc)):
continue
if not is_prime(long(a*na + b*(nb-1) + c*nc)):
continue
if not is_prime(long(a*na + b*nb + c*(nc-1))):
continue
if not is_prime(long(a*na + b*nb + c*nc)):
continue
print a*na + b*nb + c*nc
my_math.py
se puede encontrar aquí: http://codepad.org/KtXsydxK
Alternativamente, también puede usar la gmpy.is_prime
función: Proyecto GMPY
Algunas 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
reemplaza range
y long
reemplaza los int
tipos de yeso. int
parece tener una sobrecarga innecesaria si la expresión evaluada da como resultado a long
.
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:
190000007777
700000011119
955666663333
47444444441111
66666622222399
280000000033333
1111333333334999
1111333333377779
1199999999900111
3355555666999999
2222233333000099
55555922222222233333
444444440004449999999
3366666633333333377777
3333333333999888883333
4441111113333333333311111
2222222293333333333333999999
999999999339999999977777777777
22222226666666222222222299999999
333333333333333333339944444444444999999999
559999999999933333333333339999999999999999
3333333333333333333111111111111666666666611111
11111111333330000000000000111111111111111111111
777777777770000000000000000000033333339999999999999999999999999
3333333333333333333333333333333333333333333333336666666977777777777777
666666666666666666611111113333337777777777777777777777777777777777777777
3333333333333333333888889999999999999999999999999999999999999999999999999933333333
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.
9901444133
(una eliminación de uno 9) no es primo (7 x 1414492019
). Sin embargo, su ejemplo anterior era correcto.