19 października 2017

Faktoryzacja a liczby trójkątne

Rozwinąłem pomysł z 8 września, rozwijając dalej rekursję. Zatrzymuje się ona gdy mniejszy z czynników staje się zerem. Wtedy mnożenie staje się dodawaniem, w którym można wyodrębnić trzy liczby trójkątne.
Okazuje się, że te liczby trójkątne można przekształcić w jedną sumę, a wtedy mam twierdzenie:




TW.   Nieparzysta liczba złożona N=a*b jest sumą b kolejnych liczb.  

a*b = 2ab/2 = (a^2+2ab+b^2 +a+b - a^2 -a - b^2-b )/2 =
( (a+b)(a+b+1) - a(a+1) - b(b+1) )/2 =
[1+...+(a+b)] - [1+...+a] - [1+...+b]
skracając dwa pierwsze nawiasy pozostaje b składników (a+1)+...+(a+b), od których odejmujemy 1+...+b = b(b+1)/2.
Ponieważ b jest nieparzyste (co wynika z nieparzystości N), od składników a+i odejmujemy (b+1)/2 uzyskując tezę.

Nie jest to jedyna suma tak uzyskana, można wspomnieć
N = (N-1)/2 + ((N-1)/2+1),
np. 143 = 71+72. 
Ale suma z twierdzenia zawierają tyle składników jaką wartość ma dzielnik. Znając krotność, można wyznaczyć dzielniki. Trochę obliczeń doprowadziło do następującej heurystyki:

Niech c będzie nieparzystą liczbą taką, że
c(c+1) < N < (c+2)(c+3),
oznaczmy przez r różnicę
r = N - c(c+1)/2 ,
zaś przez d najmniejszą wartość sumy d=1.
Jeśli r>=c, zmniejszamy r=r-c, d++ (pobieramy z reszty liczność składników zwiększając każdy z nich o 1).
Dopóki d>1 powtarzamy: 
 r = r+2*d+1; // zabieramy dwa pierwsze składniki do reszty
 c = c-2; // zmniejszamy krotność składników o zabrane
 d = d+2+r/c; // 'przesuwa' lub zwiększa najmniejszy składnik sumy
 r = r%c; // zmniejszanie reszty o wartość przekazaną składnikom sumy
Jeśli 0=r, jest to szukana suma której długość c jest dzielnikiem N

Dzielenie jest początkowo bardzo rzadkie, około trzecia część przypadków wykorzystuje co najwyżej jednokrotną różnicę, taką jak przy inicjacji zmiennych.

Przykład: N=143
[1+2+3+4+5+6+7+8+9+10+11+12+13+14+15] + 23 = 143
r=23-15 = 8; c=15; d=1+1; po tej modyfikacji mamy
[2+3+4+...+16] + 8 = 143
iteracja, zabieramy 2+3, dokładając do reszty r = 8+2+3 = 13
[4+...+16]+13, ale mamy c = 15-2 = 13 składników, przerzucamy z reszty uzyskując
[5+...+17] = 143
elementów 13 i dzielnik 13.

Nie musimy, ale kontynuując mamy
143 = [7+...+17] + (5+6) = [8+...+18] + 0
Kolejny dzielnik 11.
[10+11+12+13+14+15+16+17+18] + (8+9) =
[11+12+13+14+15+16+17+18+19] + 8