274 chiffres
4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111
Cela a pris environ 20 heures de temps CPU à trouver et environ 2 minutes par prime à prouver. En revanche, la solution à 84 chiffres peut être trouvée en environ 3 minutes.
84 chiffres
444444444444444444444444444444444444444444444444441111111113333333333333333333333333
77777777999999999999999777777777 (32 chiffres)
66666666666666622222222222222333 (32 chiffres)
647777777777777777777777777 (27 chiffres)
44444441333333333333 (20 chiffres)
999996677777777777 (18 chiffres)
167777777777777 (15 chiffres)
Je recommande cet outil si vous souhaitez confirmer la primauté: l'applet ECM de D. Alpern
Utiliser également une approche repdigit, qui semble être l'approche la plus susceptible de trouver de grandes valeurs. Le script suivant ignore algorithmiquement la plupart des nombres ou des troncatures, ce qui entraînera des multiples de 2, 3, 5 et maintenant 11 c / o PeterTaylor (sa contribution a augmenté l'efficacité d'environ 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
peut être trouvé ici: http://codepad.org/KtXsydxK
Alternativement, vous pouvez également utiliser la gmpy.is_prime
fonction: GMPY Project
Quelques petites améliorations de vitesse en raison du profilage. Le contrôle de primalité pour le plus long des quatre candidats a été déplacé à la fin, xrange
remplace range
et long
remplace int
les transtypages de type. int
semble avoir une surcharge inutile si l'expression évaluée aboutit à a long
.
Règles de divisibilité
Soit N un entier positif de la forme a ... ab ... bc ... c , où a , b et c sont des chiffres répétés.
Par 2 et 5
- Pour éviter la divisibilité par 2 et 5 , c peut ne pas être dans l'ensemble [0, 2, 4, 5, 6, 8] . De plus, si b est membre de cet ensemble, la longueur de c ne peut être inférieure à 2.
Par 3
- Si N = 1 (mod 3) , alors N ne peut contenir aucun de [1, 4, 7] , car la suppression de l'un d'eux entraînerait trivialement un multiple de 3 . De même pour N = 2 (mod 3) et [2, 5, 8] . Cette implémentation utilise une forme légèrement affaiblie de ceci: si N contient l'un de [1, 4, 7] , il ne peut contenir aucun de [2, 5, 8] , et vice versa. De plus, N peut ne pas être composé uniquement de [0, 3, 6, 9] . Il s'agit en grande partie d'une déclaration équivalente, mais elle permet certains cas triviaux, par exemple a , b et cchacun étant répété un multiple de 3 fois.
Par 11
- Comme le note Peter Taylor , si N est de la forme aabbcc ... xxyyzz , c'est-à-dire qu'il n'est composé que de chiffres répétés un nombre pair de fois, il est divisible par 11 : a0b0c ... x0y0z . Cette observation élimine la moitié de l'espace de recherche. Si N est de longueur impaire, alors la longueur de a , b et c doit également être impaire (réduction de 75% de l'espace de recherche), et si N est de longueur paire, alors un seul de a , b ou c peut être pair en longueur (réduction de 25% de l'espace de recherche).
- Conjecture: si abc est un multiple de 11 , par exemple 407 , alors toutes les répétitions impaires de a , b et c seront également des multiples de 11 . Cela sort du champ d'application de la règle de divisibilité par 11 ci-dessus ; en fait, seules les répétitions impaires font partie de celles qui sont explicitement autorisées. Je n'ai pas de preuve pour cela, mais les tests systématiques n'ont pas pu trouver de contre-exemple. Comparez: 444077777 , 44444000777 , 44444440000077777777777 , etc. N'importe qui peut se sentir libre de prouver ou d'infirmer cette conjecture. aditsu a depuis démontré que c'était correct.
Autres formes
2 séries de chiffres répétés
Les nombres de la forme que randomra recherchait, a ... ab ... b , semblent être beaucoup plus rares. Il n'y a que 7 solutions de moins de 10 1700 , dont la plus grande est de 12 chiffres.
4 séries de chiffres répétés
Les nombres de cette forme, a ... ab ... bc ... cd ... d , semblent être plus densément répartis que ceux que je cherchais. Il existe 69 solutions de moins de 10 100 , contre 32 en utilisant 3 ensembles de chiffres répétés. Ceux entre 10 11 et 10 100 sont les suivants:
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
Il existe un simple argument heuristique expliquant pourquoi cela devrait être le cas. Pour chaque longueur numérique, il existe un certain nombre d'ensembles répétés (c'est-à-dire 3 ensembles répétés, ou 4 ensembles répétés, etc.) pour lesquels le nombre attendu de solutions sera le plus élevé. La transition se produit lorsque le nombre de solutions supplémentaires possibles, pris sous forme de rapport, l'emporte sur la probabilité que le nombre supplémentaire à vérifier soit premier. Étant donné la nature exponentielle des possibilités de vérification et la nature logarithmique de la distribution des nombres premiers, cela se produit relativement rapidement.
Si, par exemple, nous voulions trouver une solution à 300 chiffres, la vérification de 4 ensembles de chiffres répétés serait beaucoup plus susceptible de produire une solution que 3 ensembles, et 5 ensembles seraient plus probables encore. Cependant, avec la puissance de calcul dont je dispose, trouver une solution beaucoup plus grande que 100 chiffres avec 4 jeux serait en dehors de ma capacité, encore moins 5 ou 6.
9901444133
(une suppression d'un 9) n'est pas prime (7 x 1414492019
). Cependant, votre exemple précédent était correct.