Numerico-algoritmice de ianuarie 2014 (continuare)

Aici făceam, în ianuarie 2014, reprezentații numerice și examinam structura de factori primi a unor diverse numere, plus compunerea sumei lor de divizori pe baza produselor de sume de puteri ale acelor factori - dacă numărul în sine este un produs de puteri prime cu anumiți exponenți, sumele sunt niște produse ale  unor sume dintre puterile acelea cu exponenții cuveniți și puterile mai mici ale respectivilor factori primi (terminând cu puterea zero sau numărul 1, ori... începând cu numărul 1).

Punând astfel în scris numerele și sumele lor de divizori, cu factorii primi și sumele expuse în produse, căutam să înțeleg mai bine construirea sumelor de divizori, în ideea că ar mai fi de îmbunătățit algoritmic (strict algoritmic, de hardware nou încă nu se punea problema la vremea aia) modul de construire a sumelor - ca să dureze mai puțin, să am mai repede rezultate.

Am pus și segmente de cod care se voiau a aborda puterile prime, dar mai înainte de asta și un scurt experiment matematic legat de sucirea bazelor de numerație ca să obținem divizibilități atipice.

Să începem cu bazele:

*
În ce situație 104 împărțit la 39 nu dă rest?
78x - 4 = y*y


x*x + 2*2 = 3*y?
5, 8, 13, 20, 29, 40, 53, 68, 85, 104, 125, 148, 173, 200, 229, 260, 293, 328, 365, 404... //nu se împart la 3; se poate demonstra matematic că x*x + 4 nu se divide cu 3, x număr natural
39, 42, 45, 48... //se împart la 3; 3*baza + 9 se împarte la 3

În nicio situație.
*

Mai jos continuăm cu lista de numere de-atunci, din 2014, și cu segmentele de cod-sursă mai sus zise:


*
120 = 2*2*2*3*5, sigma(120) = (1+2+4+8)*(1+3)*(1+5) = 15*4*6 = 360

240 = 2*2*2*2*3*5, sigma(240) = (1+2+4+8+15)*(1+3)*(1+5) = 31*4*6 = 744

360 = 2*2*2*3*3*5, sigma(360) = (1+2+4+8)*(1+3+9)*(1+5) = 15*13*6 = 1170

600 = 2*2*2*3*5*5, sigma(600) = (1+2+4+8)*(1+3)*(1+5+25) = 15*4*31 = 1860

2016 = 2*2*2*2*2*3*3*7, sigma(2016) = (1+2+4+8+16+32)*(1+3+9)*(1+7) = 63*13*8 = 6552
A atârnat de ceea ce a înecat.

6200 = 2*2*2*5*5*31, sigma(6200) = (1+2+4+8)*(1+5+25)*(1+31) = 15*31*32 = 14880

8190 = 2*3*3*5*7*13, sigma(8190) = (1+2)*(1+3+9)*(1+5)*(1+7)*(1+13) = 3*13*6*8*14 = 26208

35640 = 2*2*2*3*3*3*3*5*11, sigma(35640) = (1+2+4+8)*(1+3+9+27+81)*(1+5)*(1+11) = 15*121*6*12 = 130680

293760 = 2*2*2*2*2*2*2*3*3*3*5*17, sigma(293760) = (1+2+4+8+16+32+64+128)*(1+3+9+27)*(1+5)*(1+17) = 255*40*6*18 = 1101600

297600 = 2*2*2*2*2*2*2*3*5*5*31, sigma(297600) = (1+2+4+8+16+32+64+128)*(1+3)*(1+5+25)*(1+31) = 255*4*31*32 = 1011840

524160 = 2*2*2*2*2*2*2*3*3*5*7*13, sigma(524160) = (1+2+4+8+16+32+64+128)*(1+3+9)*(1+5)*(1+7)*(1+13) = 255*13*6*8*14 = 2227680

997920 = 2*2*2*2*2*3*3*3*3*5*7*11, sigma(997920) = (1+2+4+8+16+32)*(1+3+9+27+81)*(1+5)*(1+7)*(1+11) = 63*121*6*8*12 = 4390848

2178540 = 2*2*3*3*5*7*7*13*19, sigma(2178540) = (1+2+4)*(1+3+9)*(1+5)*(1+7+49)*(1+13)*(1+19) = 7*13*6*57*14*20 = 8714160

9694080 = 2*2*2*2*2*2*2*3*3*3*3*5*11*17, sigma(9694080) = (1+2+4+8+16+32+64+128)*(1+3+9+27+81)*(1+5)*(1+11)*(1+17) = 255*121*6*12*18 = 39988080

18506880 = 2*2*2*2*2*2*2*3*3*3*3*3*5*7*17, sigma(18506880) = (1+2+4+8+16+32+64+128)*(1+3+9+27+81+243)*(1+5)*(1+7)*(1+17) = 255*364*6*8*18 = 80196480

23569920 = 2*2*2*2*2*2*2*2*2*3*3*3*5*11*31, sigma(23569920) = (1+2+4+8+16+32+64+128+256+512)*(1+3+9+27)*(1+5)*(1+11)*(1+31) = 1023*40*6*12*32 = 94279680

Rădăcina tăvălugului numeric este în luna mai 2005.

Varianta 1:

int v = 0;
for(i = 0; i < W; i++) {
    if(n % b[i] == 0) {
        t = b[i];
        num[v] = b[i];
        mpz_divexact_ui(m, n, t);

        while(mpz_divisible_ui (m, t) ) {
            put[v] ++;
            t *= b[i];
        }
    v++;
    }

for(i = 0; i < v; i++) {
    t = pow(num[i], put[i]);
    mpz_mul_ui(s, (t + (t - 1) / (num[i] - 1));
    }

Varianta 2:

for(i = 0; i < W; i++) {
    if(n % b[i] == 0) {
        t = b[i];
        mpz_divexact_ui(m, n, t);

        while (mpz_divisible_ui(m, t)) {
            t *= b[i];
        }

    mpz_mul_ui(s, (t + (t - 1) / (b[i] - 1));
    }

Puteri maxime la care au voie numerele prime să apară, ca să nu se treacă de 64 de biți:
3 la 39, 5 la 26, 7 la 21, 11 la 17, 13 la 16, 17 la 14, 19 la 14, 23 la 13, 29 la 12 (+ 1 la fiecare, la matricea de puteri)
*

(va urma)

Comentarii

Postări populare