Numerele în 2014, partea IV: Marea reformă

La 22 mai 2014 am realizat că se obține coeficientul de fracționare a abundenței numărului în următorul fel:

-Se calculează suma divizorilor;
-Se face cel mai mare divizor comun dintre număr și sumă;
-Se obține câtul împărțirii numărului la acest divizor comun (împărțire exactă, cu mpz_divexact, funcție rapidă);
-Acest cât este coeficientul fracțional.

Este chiar el, nu un multiplu aducător, cum se întâmpla în vechea metodă, care dura foarte mult și reclama un vector de câteva mii de numere întregi.

Avem numărul 3360, iar suma divizorilor săi este 12096. Abundența este 3.6, adică 3 + 3/5 (cu cincimi, coeficient fracțional 5).
Avem cmmdc(3360, 12096) = 672, iar 3360/672 = 5.

Avem alt număr: 238080. Suma divizorilor săi este 785664. Abundența este 3.3, adică 3 + 3/10 (zecimi, coeficientul 10).
cmmdc(238080, 785664) = 23808, iar 238080/23808 = 10.

În GMP un asemenea calcul se face având:
f, variabilă auxiliară;
A, numărul de test;
B, suma divizorilor lui A.

Atunci:

mpz_gcd(f, A, B);//Cel mai mare divizor comun
mpz_divexact(f, A, f);//Câtul dintre număr și cmmdc
return (mpz_cmp_ui(f, 100001) < 0);

Așa se validează numerele al căror coeficient fracțional al abundenței este de maxim 100000 (o deschidere numerică destul de mare, am găsit peste 1.6 miliarde de astfel de numere).
Strict pentru fondul I, 11 trebuie să fie în locul lui 100001.

La Return mai poate fi scris (mpz_get_ui(f) < 11), unde se compară cu 11 direct imaginea întreagă a lui f, f fiind mpz_t. Se poate însă ca acel cât memorat în f să fie mai mare de 64 de biți, iar convertirea la întreg cu mpz_get_ui nu dă valoarea exactă a lui f, neadevărul putând da incorectitudini (mpz_get_ui(f) să fie crezut mai mic de 11 când f, de fapt, este mult mai mare).
În schimb, mpz_cmp_ui(f, 11) va spune de fiecare dată adevărul.

Validarea pentru fondul I se face, de regulă, cu funcția VALID(), iar la fondul II cu VALID4() sau VALID5(). Primele două funcții folosesc comparația cu mpz_cmp_ui, iar VALID5() riscanta comparație a imaginii pe 64 de biți. Cele două comparații pot alterna la primele două funcții.

La actualizarea GIG.TXT se folosește VALIDR(), care compară f cu 112001 prin funcția înțeleaptă mpz_cmp_ui.
Acum GIG.TXT este doar pe discul de 1 TB, a depășit 300 de GB zecimali (nu binari). Fondul I este în creștere.

Am mărit mai multe fișiere de factori primi, aduși de înmulțirile cu factori primi din șirul general (care acum se leagă de toate cele 5321, adică 5173 primare și cele 148 găsite cu ajutorul lui PARI/GP).
De aranjat măririle, cu păstrarea unor versiuni de dimensiuni rezonabile ale șirurilor parțiale de factori primi.

(va urma)

Comentarii

Postări populare