Alte expuneri algoritmice pentru numere în vara/toamna 2014 (Partea I)

Plan nou pentru modificarea sumelor la MODSPRIM, MODIFSUM + varietăți (MODMIN, MODPRIM caz special, MODIFMSUM):

Să nu se mai facă vectori atât de mari de sumInt, și la modificare să nu se parcurgă vectorul întreg b, ci pe baza factorilor dați pentru vectorul A1:

1) Dacă sunt primi (MODSPRIM), se face sumInt sau sumIntMpz numai pentru ei și suma integrală a numărului de bază se modifică după ei;
2) Dacă sunt compuși din primi (MODIFSUM), se scot factorii primi din care sunt ei formați și se face sumInt sau sumIntMpz pentru ei, iar suma se modifică după ei. Calculul sumelor integrale poate fi făcut tot cu funcțiile clasice (SUMADIV, NUMSUM, SM) la numerele de bază, atunci ADPRIMDIV, ADMODDIV și varietățile lor devin inutile.

De asemenea s-ar prefera să nu se streseze funcțiile de calcul pentru sumele de bază cu sintaxe de tipul if(b[d1] == A2[u]) ca să se identifice direct din ele factorii primi și să se facă de acolo sumInt, ci sumInt-urile să fie făcute separat, sau chiar ar fi posibil ca suma să se facă întâi pe baza acestor sumInt-uri și restul sumei din funcțiile adaptate pentru calculul său, dar atunci ar fi nevoie de noi varietăți de SCOTFACT pentru vectorul b.

Dar SCOTFACT-urile să fie făcute numai într-un singur rând, pe baza factorilor primi transmiși (sau deduși, la MODIFSUM), înainte de intrarea în while(1) la citirea din GIG.TXT. Să nu se facă SCOTFACT la fiecare număr din GIG.TXT.

Sau chiar se pot folosi maxime precalculate (pe baza fișierului de puteri corespunzător, ca PUTERI240.TXT sau PUTERITOT.TXT) să se precalculeze sumInt(Mpz) pentru numerele prime setate pentru căutare, dar atunci ar fi multe împărțiri în loc să se plece de jos cu înmulțiri. Pe de altă parte se scapă de noua varietate de SCOTFACT (care ar și trebui împăcată cu SCOTFACT pentru 3, 5 și 7).

Această reformă poate aduce varietățile de ADPRIMDIV și de ADMODDIV în fișierul GUNOI.TXT.

La NUMSIMPL lucrurile rămân ca până acum, reforma modificării sumei nu se aplică acolo.

1, 8, 57, 400, 2801.
1, 6, 31, 156, 781.
1, 4, 13, 40, 121, 364, 1093.

Pentru TOLNUM.cc se păstrează sistemul ADUNDIV(M) + MODSUMSUS(M) + SUMCONT(M)1 + MODSUM(M). Concluzie din 3 septembrie 2014.

De acum C.TXT nu se mai numeşte C.TXT, ci SUS.TXT pentru căutarea în sus şi JOS.TXT pentru cea în jos. Optimizare la ACTUAL(M) în IATEXT(): să se urce în interiorul textelor de rezultate până la un prag potrivit cu tipul fişierului: rezultate în sus sau în jos. Numele SUS.TXT şi JOS.TXT trebuie să apară în INTERC.h la fiecare funcţie de actualizare.

De asemenea la sfârşitul unei actualizări se scrie de la început (w), în fişierul DIM.TXT, care este dimensiunea maximă agreată a fişierului GIG.TXT.
Sunt două GIG.TXT, alternativ: pe /media/root/1TB sau pe /media/root/2TB. Primul se numeşte generic GIGTEXT, iar celălalt, GIGTEXT2.

În VECUNG.cc este funcţia TOTNUM(const char *t) care primeşte numele fişierului actual (GIGTEXT sau GIGTEXT2) şi numără numerele din el ca stringuri, până la dimensiunea agreată şi citită din DIM.TXT: ftell(F1) == PP. Ca să se ştie câte numere are cea mai recentă versiune agreată a GIG.TXT.
De fapt trebuiesc numărate liniile din text (câte linii, atâtea numere).

La FACTORSUBuri fișierul de rezultate se numește FSB.TXT și nu SUB.TXT.

Așadar, acum fișierele de rezultate se numesc SUS sau JOS (.TXT) pentru căutările cu înmulțire/împărțire, iar pentru cele cu substituții în factorizările prime, FSB.TXT. Și derivate.
Mai există VCN.TXT pentru VECUN (exclusiv fondul I), dar acolo rămâne cu mai multe căutări ale căror rezultate sunt scrise în același VCN.TXT. De asemenea, SUBV.TXT pentru VECUNSUB (FACTORSUB(M) vecunic), rămâne și el așa.

La căutările non-vecunice:
Fiecare fișier trebuie folosit într-o singură căutare, eșuată pe drum (de preferință nu) sau nu. Pentru o nouă căutare de același fel se folosește altă cale sau se schimbă numele fișierului de rezultate la aceeași cale; de exemplu, după o căutare cu înmulțire cu SUS.TXT în /GILIPOLLAN/1, fie se trece în, de pildă, /GILIPOLLAN/1/T cu SUS.TXT, fie se face SUS1.TXT în /GILIPOLLAN/1.

Fișierele se deschid cu "w" la pornirea căutării, adică dacă era ceva în ele (de preferat să nu existe întâi sau să nu aibă nimic), se șterge conținutul.

(va urma)

Comentarii

Postări populare