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)
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
Trimiteți un comentariu