Suma și numărul divizorilor. Indicatorul lui Euler
În acest articol voi prezenta câteva aplicații mai interesante la descompunerea unui număr întreg în factori primi: numărul divizorilor, suma divizorilor și indicatorul lui Euler. Ne vom axa pe demonstrarea formulelor pentru calculul acestor funcții, și implicit pe modul în care putem deduce aceste formule.
Funcția
Înainte de a începe, țin să menționez că, în literatura de specialitate, notația folosită pentru suma divizorilor lui ridicați la puterea este
În particular, reprezintă numărul divizorilor lui iar reprezintă suma divizorilor lui De exemplu:
Vom păstra aceste notații și în continuare.
Numărul divizorilor unui întreg
După cum am zis, numărul divizorilor unui număr natural nenul se notează cu Formula pentru numărul divizorilor este destul de cunoscută. Dacă descompunerea în factori primi a lui este atunci:
Demonstrația este foarte simplă: Numărul este divizibil cu dacă și numai dacă poate fi scris sub forma astfel încât fiecare exponent să fie mai mic sau egal cu Ei bine, fiecare poate lua valori: Conform regulii produsului, numerele se înmulțesc, iar de aici obținem formula inițială.
Iată cum putem calcula eficient în C++, modificând foarte puțin algoritmul clasic de descompunere în factori primi:
int num = 1;for (int d = 2; d * d <= n; d++) { int e = 1; while (n % d == 0) { e++; n /= d; } num *= e;}if (n > 1) num *= 2;cout << num << '\n';
Puteți observa că, înainte de linia 8, nu a mai fost nevoie să testez dacă este divizibil cu Asta pentru că, dacă nu se intră în while
, rezultatul va fi înmulțit cu iar asta nu-l va afecta.
Suma divizorilor unui întreg
Suma divizorilor unui număr natural nenul se notează cu Păstrând notația de mai sus pentru descompunerea lui în factori primi, suma divizorilor se calculează astfel:
Pentru a demonstra formula, vom porni de la un caz particular: unde este un număr prim. În acest caz, singurii divizori ai lui sunt Aceștia se află într-o progresie geometrică de rație Prin urmare,
La pasul următor, vom considera că unde și sunt numere prime distincte. Avem:
Dacă de pe fiecare linie îl dăm în factor pe iar mai apoi factorizăm obținem:
Generalizând, ajungem la formula inițială:
Iată și o implementare în C++ a acestei formule:
int sum = 1;for (int d = 2; d * d <= n; d++) { int pwr = d; while (n % d == 0) { pwr *= d; n /= d; } sum *= (pwr - 1) / (d - 1);}if (n > 1) sum *= (n * n - 1) / (n - 1);cout << sum << '\n';
Indicatorul lui Euler
Indicatorul lui Euler se notează cu și reprezintă numărul de numere naturale nenule mai mici sau egale cu care sunt prime cu De exemplu, De remarcat că acel sau egale cu este pus doar pentru a asigura faptul că orice nefiind prim cu el însuși. Formula pentru calculul indicatorului este:
Chiar dacă a doua variantă a formulei este mai elegantă, deoarece nu folosește exponenții noi o vom folosi pe prima, pentru a evita lucrul cu double
. Iată deci calcularea lui în C++:
int phi = 1;for (int d = 2; d * d <= n; d++) if (n % d == 0) { phi *= d - 1; n /= d; while (n % d == 0) { phi *= d; n /= d; } }if (n > 1) phi *= n - 1;cout << phi << '\n';
Demonstrația formulei
În cele ce urmează, pasionații de matematică pot urmări demonstrația formulei de mai sus. Avantajul ei este că nu necesită folosirea Teoremei Chineze a Resturilor, spre deosebire de majoritatea demonstrațiilor găsite de mine pe net. Mai întâi, va trebui să introducem conceptul de funcție multiplicativă:
Funcții multiplicative
În teoria numerelor, o funcție definită pe se numește multiplicativă dacă are proprietatea că și că oricare ar fi și două numere naturale nenule prime între ele. Atât numărul cât și suma divizorilor sunt funcții multiplicative, acest fapt bazându-se pe formulele deja demonstrate. În cazul indicatorului lui Euler, va fi mai ușor să deducem formula dacă mai întâi demonstrăm multiplicitatea funcției.
Așadar, trebuie să demonstrăm că Vom aranja numerele de la la sub forma unei matrice cu linii și coloane. Să luăm drept exemplu și
Partea cu
Pentru ca un număr să fie prim cu el trebuie să fie prim atât cu cât și cu În acest sens, haideți să vedem mai întâi ce numere din matrice sunt prime cu Elementul de pe poziția are forma Este evident că Deci, dacă și numai dacă Așadar, elementele prime cu sunt cele de pe coloanele pentru care Numărul acestor coloane este
Partea cu
Acum, de pe aceste coloane ne interesează doar numerele prime cu Să vedem ce resturi obținem dacă împărțim toate elementele matricei din exemplu la
Aparent, pe fiecare coloană obținem toate resturile posibile modulo Dacă asta este adevărat întotdeauna, înseamnă că pe fiecare coloană cu avem numere prime cu de unde
Deci, mai rămâne să demonstrăm că pe nicio coloană nu putem găsi două resturi egale. Vom presupune prin reducere la absurd că putem. Cum elementele de pe coloana sunt de forma cu ar trebui să existe două elemente și cu congruente modulo Asta ar însemna că diferența lor, ar fi divizibilă cu Cum este prim cu rămâne ca să fie divizibil cu Însă, din cauza faptului că singura posibilitate este Contradicție cu Deci, presupunerea făcută este falsă, ceea ce înseamnă că formula este într-adevăr corectă.
Formula pentru
Pentru singurele valori pe care le poate lua CMMDC-ul dintre și un număr mai mic sau egal cu el sunt Prin urmare, numerele care nu sunt prime cu sunt multiplii lui și anume numărul lor fiind Asta înseamnă că
Generalizarea
Acum putem generaliza foarte ușor formula, folosindu-ne de multiplicitatea indicatorului:
Probleme recomandate
Problema Fracții am explicat-o aici. De asemenea, un exercițiu bun este să adaptați Ciurul lui Eratostene din problema Fracții pentru a calcula eficient suma și numărul divizorilor tuturor numerelor naturale de la la În plus, o aplicație importantă a indicatorului lui Euler este Teorema lui Euler, care e foarte utilă în calculul inversului modular, despre care voi scrie într-un articol viitor.
Dacă aveți vreo întrebare despre cele trei aplicații la descompunerea în factori primi, nu ezitați să o adresați mai jos, într-un comentariu Iar dacă vi s-a părut un articol interesant, nu uitați să-i dați un share pe FaceBook!