274 dígitos
4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111
Isso levou cerca de 20 horas de tempo de CPU para encontrar e cerca de 2 minutos por prime para provar. Por outro lado, a solução de 84 dígitos pode ser encontrada em cerca de 3 minutos.
84 dígitos
444444444444444444444444444444444444444444444444441111111113333333333333333333333333
77777777999999999999999777777777 (32 dígitos)
66666666666666622222222222222333 (32 dígitos)
647777777777777777777777777 (27 dígitos)
44444441333333333333 (20 dígitos)
999996677777777777777 (15 dígitos)
1699 )
Eu recomendo esta ferramenta se você deseja confirmar a primalidade: D. Alpern's ECM Applet
Também usando uma abordagem de repdigit, que parece ser a abordagem mais provável de encontrar valores grandes. O script a seguir ignora algoritmicamente a maioria dos números ou truncamentos que resultarão em múltiplos de 2, 3, 5 e agora 11 c / o PeterTaylor (sua contribuição aumentou a eficiência em aproximadamente 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
pode ser encontrada aqui: http://codepad.org/KtXsydxK
Como alternativa, você também pode usar a gmpy.is_prime
função: Projeto GMPY
Algumas pequenas melhorias na velocidade como resultado da criação de perfil. A verificação de primalidade para o mais longo dos quatro candidatos foi movida para o final, xrange
substitui range
e long
substitui as int
conversões de tipo. int
parece ter sobrecarga desnecessária se a expressão avaliada resultar em a long
.
Regras de Divisibilidade
Deixe- N ser um número inteiro de postitive a forma de um ... ab bc ... ... c , onde um , b e c são repetidos dígitos.
Por 2 e 5
- Para evitar a divisibilidade por 2 e 5 , c pode não estar no conjunto [0, 2, 4, 5, 6, 8] . Além disso, se b for um membro deste conjunto, o comprimento de c não poderá ser inferior a 2.
Por 3
- Se N = 1 (mod 3) , N pode não conter nenhum de [1, 4, 7] , pois a remoção de qualquer um deles resultaria trivialmente em um múltiplo de 3 . Da mesma forma para N = 2 (mod 3) e [2, 5, 8] . Esta implementação usa uma forma levemente enfraquecida disso: se N contiver um de [1, 4, 7] , ele não poderá conter nenhum de [2, 5, 8] e vice-versa. Além disso, N pode não consistir apenas em [0, 3, 6, 9] . Esta é em grande parte uma declaração equivalente, mas permite para alguns casos triviais, por exemplo a , b e ccada um sendo repetido um múltiplo de 3 vezes.
Por 11
- Como PeterTaylor observa, se N é da forma aabbcc ... xxyyzz , ou seja, consiste apenas em dígitos repetidos um número par de vezes, é trivialmente divisível por 11 : a0b0c ... x0y0z . Essa observação elimina metade do espaço de pesquisa. Se N é de comprimento ímpar, então o comprimento de um , b e c deve ser todos estranho, bem como (redução do espaço de busca 75%), e se N é de comprimento par, então apenas um de um , b ou c pode ser ainda de comprimento (redução de 25% do espaço de pesquisa).
- Conjectura: Se abc é um múltiplo de 11 , por exemplo 407 , em seguida, todas as repetições ímpares de um , b e c vão também ser múltiplos de 11 . Isso cai fora do escopo da divisibilidade acima pela regra 11 ; de fato, apenas repetições ímpares estão entre aquelas explicitamente permitidas. Não tenho uma prova disso, mas o teste sistemático não conseguiu encontrar um contra-exemplo. Compare: 444077777 , 44444000777 , 4444444000007777777777777 , etc. Qualquer pessoa pode se sentir à vontade para provar ou refutar essa conjectura. Desde então, o aditsu demonstrou que isso está correto.
Outras formas
2 conjuntos de dígitos repetidos Os
números da forma que a randomra estava seguindo, a ... ab ... b , parecem ser muito mais raros. Existem apenas 7 soluções com menos de 10 1700 , a maior das quais com 12 dígitos.
4 conjuntos de dígitos repetidos Os
números dessa forma, a ... ab ... bc ... cd ... d , parecem estar mais densamente distribuídos do que aqueles que eu estava procurando. Existem 69 soluções com menos de 10 100 , em comparação com as 32 usando 3 conjuntos de dígitos repetidos. Aqueles entre 10 11 e 10 100 são os seguintes:
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
Há um argumento heurístico simples sobre por que esse deveria ser o caso. Para cada comprimento digital, há um número de conjuntos repetidos (ou seja, 3 conjuntos repetidos ou 4 conjuntos repetidos, etc.) para os quais o número esperado de soluções será o mais alto. A transição ocorre quando o número de soluções possíveis adicionais, tomadas como uma proporção, supera a probabilidade de que o número adicional a ser verificado seja primo. Dada a natureza exponencial das possibilidades de verificação e a natureza logarítmica da distribuição de números primos, isso acontece relativamente rápido.
Se, por exemplo, desejássemos encontrar uma solução de 300 dígitos, a verificação de 4 conjuntos de dígitos repetidos teria muito mais probabilidade de produzir uma solução do que 3 conjuntos e 5 conjuntos ainda mais. No entanto, com o poder de computação que tenho à minha disposição, encontrar uma solução muito superior a 100 dígitos com 4 conjuntos estaria fora da minha capacidade, quanto mais 5 ou 6.
9901444133
(uma exclusão de um 9) não é primo (7 x 1414492019
). Seu exemplo anterior estava correto, no entanto.