Cum mai erau numerele prin anul 2010 (povestire din 2014)

Mulțimea numerelor prime este infinită, dar pentru numerele cu abundență bine fracționată puține dintre ele sunt potrivite, așa că nu era nevoie de mulți factori primi.

În MIRACL am lucrat întâi eminamente pe variabile de tipul Flash (tip rațional de numere din Miracl), în loc de Big (cel întreg). Suma divizorilor se făcea tot în Flash, și se înmulțea pe rând cu 6, 8, 9, 10, ca să se vadă dacă se împarte la număr (astfel fiind confirmate fracțiile din abundență, unde se împărțea).

Abia în iulie 2010 am început folosirea Big-ului, factorii primi fiind împărțiți în două (întregi clasici și, peste 2^32, factori de tip Big); Flash-ul a fost marginalizat, s-a câștigat un plus de rapiditate în procesarea numerelor (cam de 7 ori).

Tot în iulie 2010 am început principiul bulgărelui numeric care crește, adică obțineam numerele unele din altele cu vectori de coeficienți de legătură și apoi în ciclu intrau și numerele noi, folosite ele însele ca să se obțină alte numere, cu coeficienții aceia.

Atunci se memorau în vectori în interiorul fișierului CPP: coeficienții de legătură, copiați din Command Prompt; numerele de bază folosite, cu tot cu noutățile puse la lucru; factorii primi. La 1 iulie 2010 am făcut o numărătoare, a numerelor miracliene (cel mai mare divizor impar mai mare decât 2^64) și a celor ne-miracliene, care erau încadrabile la long double (cel mai mare divizor impar sub 2^64). Erau cam 880 la 680. 1500 și ceva, cu totul.

Prin ultima decadă din iulie am creat fișierul de căutare VECUN.CPP, unde numerele miracliene și ne-miracliene erau încărcate în același vector, unele (cel puțin) erau sortate crescător cu inserție binară (SIB).

De la unirea numerelor în vector a venit numele VECUN: VECtor UNit, VEC-UN.
De fapt, se pare că o dezbinare tot era, dar nu după trierea miracliană, ci numerele semi- și multiperfecte luate de pe Internet erau separate de cele găsite de mine. A fost făcut pe atunci și VECUNG.CPP, ca o asemănare cu ce era în VECUN, dar nu chiar ca acolo.

La 7 septembrie 2010 am făcut un text cu 89 de numere ale căror abundențe aveau fracții șeptime (textul cu șeptari), dar șeptarii nu au fost puși atunci cu toate celelalte numere.
Creșterea vectorului de coeficienți de legătură a dus la depășirea a 640 KB executabili de către codul sursă, spre sfârșitul lunii august 2010. CPP-urile în Windows nu se mai executau când codul executabil trecea de 640 KB.

În seara de 28 august 2010, când lucram la numere, am distrus memory stick-ul de 2 GB zecimali pe care depozitam atunci CPP-ul care conținea numerele pentru VECUN și codul sursă executabil (în care erau cuprinse numerele din vectori). Era foarte solicitat de comanda de compilare în Borland C++ 5.5.1, pe care o repetam mult și care se executa pe stick, ca atare el a cedat. Bine că aveam o variantă a fișierului și pe hard diskul SATA de la acea vreme (320GB, SAMSUNG HD322HJ).

Atunci numerele de legătură au trebuit generate direct în memorie, fără să mai stea scrise în vector, în fișierul CPP.
Deja și numerele de bază aveau peste 200 KB. În creștere.

La 10 august 2010 erau 1733 de numere. Pe atunci nu exista fondul 2.
Programam în C++ cu MIRACL, și cu cod de assembler (asm), iar aici MIRACL era mai rapidă decât pe C simplu, pentru că avea cod de asamblare pentru C++.
Din mai până în iulie 2010 m-am concentrat pe numerele cu maxim 50 de cifre, pentru găsirea rezultatelor, iar până la 10 august erau și niște numere ce ajungeau până la 60 și ceva de cifre, care intrau în fișierul BAZGIG.TXT.

Luam surse semi- și multiperfecte de pe Internet și le adăugam, iar pe baza lor dezvoltam masa numerică în jurul lor, prin împărțire sau înmulțire asupra numerelor deja găsite, și creștea treptat limita de sus, ca putere de 10. La 16 septembrie era de 10 la puterea 119.
Când în factorizări apăreau numere prime noi, erau individualizate și puse în depozitul de factori primi.

(va urma)

Comentarii

Postări populare