274 cifre
4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111
Questa operazione ha richiesto circa 20 ore di tempo CPU e circa 2 minuti per prime per dimostrarlo. Al contrario, la soluzione a 84 cifre si trova in circa 3 minuti.
84 cifre
444444444444444444444444444444444444444444444444441111111113333333333333333333333333
77777777999999999999999777777777 (32 cifre)
66666666666666622222222222222333 (32 cifre)
647777777777777777777777777 (27 cifre)
44444441333333333333 (20 cifre)
999996677777777777 (18 cifre)
167777777777777 (15 cifre)
Consiglio questo strumento se si desidera confermare la primalità: D. Alpern's ECM Applet
Anche usando un approccio di riprogettazione, che sembra essere l'approccio che molto probabilmente trova grandi valori. Il seguente script salta algoritmicamente sulla maggior parte dei numeri o troncamenti, il che si tradurrà in multipli di 2, 3, 5 e ora 11 c / o PeterTaylor (il suo contributo ha aumentato l'efficienza di circa il 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
può essere trovato qui: http://codepad.org/KtXsydxK
In alternativa, è possibile utilizzare anche la gmpy.is_prime
funzione: Progetto GMPY
Alcuni piccoli miglioramenti della velocità a seguito della profilazione. Il controllo di primalità per il più lungo dei quattro candidati è stato spostato alla fine, xrange
sostituisce range
e long
sostituisce i int
cast di tipo. int
sembra avere un sovraccarico non necessario se l'espressione valutata risulta in a long
.
Regole di divisibilità
Lasciate N sia un numero intero postitive della forma un ... ab ... bc ... c , dove un , b e c sono ripetute cifre.
Per 2 e 5
- Per evitare la divisibilità per 2 e 5 , c potrebbe non essere nell'insieme [0, 2, 4, 5, 6, 8] . Inoltre, se b è un membro di questo set, la lunghezza di c non può essere inferiore a 2.
Per 3
- Se N = 1 (mod 3) , allora N non può contenere nessuno di [1, 4, 7] , poiché la rimozione di uno di questi comporterebbe banalmente un multiplo di 3 . Allo stesso modo per N = 2 (mod 3) e [2, 5, 8] . Questa implementazione usa una forma leggermente indebolita di questo: se N contiene uno di [1, 4, 7] , non può contenere nessuno di [2, 5, 8] e viceversa. Inoltre, N non può consistere esclusivamente in [0, 3, 6, 9] . Questa è in gran parte un'affermazione equivalente, ma consente alcuni casi banali, ad esempio a , b e cognuno viene ripetuto un multiplo di 3 volte.
Per 11
- Come osserva PeterTaylor , se N è nella forma aabbcc ... xxyyzz , ovvero consiste solo di cifre ripetute un numero pari di volte, è banalmente divisibile per 11 : a0b0c ... x0y0z . Questa osservazione elimina metà dello spazio di ricerca. Se N è di lunghezza dispari, allora la lunghezza di un , b e c devono essere tutti dispari così (riduzione dello spazio di ricerca 75%), e se N è di lunghezza pari, allora solo uno di una , b o c possono essere ancora di lunghezza (riduzione dello spazio di ricerca del 25%).
- Congettura: Se abc è un multiplo di 11 , per esempio 407 , allora tutte le ripetizioni dispari di un , b e c saranno anche multipli di 11 . Ciò non rientra nell'ambito della suddetta divisibilità per 11 regola; infatti, solo le ripetizioni dispari sono tra quelle che sono esplicitamente consentite. Non ne ho una prova, ma i test sistematici non sono stati in grado di trovare un contro-esempio. Confronta: 444077777 , 44444000777 , 44444440000077777777777 , ecc. Chiunque può sentirsi libero di provare o confutare questa congettura. da allora aditsu ha dimostrato che ciò è corretto.
Altre forme
2 serie di cifre ripetute I
numeri della forma che casualmente stava perseguendo, a ... ab ... b , sembrano essere molto più rari. Ci sono solo 7 soluzioni in meno di 10 1700 , la più grande delle quali è di 12 cifre.
4 serie di cifre ripetute I
numeri di questo modulo, a ... ab ... bc ... cd ... d , sembrano essere distribuiti in modo più denso di quelli che stavo cercando. Ci sono 69 soluzioni in meno di 10 100 , rispetto alle 32 che utilizzano 3 serie di cifre ripetute. Quelli tra 10 11 e 10 100 sono i seguenti:
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
C'è un semplice argomento euristico sul perché questo dovrebbe essere il caso. Per ogni lunghezza digitale, esiste un numero di set ripetuti (ovvero 3 set ripetuti o 4 set ripetuti, ecc.) Per i quali il numero previsto di soluzioni sarà il più alto. La transizione si verifica quando il numero di ulteriori possibili soluzioni, considerato come un rapporto, supera la probabilità che il numero aggiuntivo da controllare sia primo. Data la natura esponenziale delle possibilità di controllo e la natura logaritmica della distribuzione dei numeri primi, ciò avviene relativamente rapidamente.
Se, ad esempio, volessimo trovare una soluzione a 300 cifre, il controllo di 4 serie di cifre ripetute sarebbe molto più probabile che produca una soluzione rispetto a 3 serie e 5 serie sarebbe ancora più probabile. Tuttavia, con la potenza di calcolo che ho a disposizione, trovare una soluzione molto più grande di 100 cifre con 4 set sarebbe al di fuori della mia capacità, figuriamoci 5 o 6.
9901444133
(una cancellazione di un 9) non è prime (7 x 1414492019
). Il tuo esempio precedente era corretto, però.