Clasa a VI-a lecția 4
Lectie
Descompunerea in factori primi
O implementare a acestei probleme de complexitate O(sqrt(n)):
#include <stdio.h>
int main() {
int n, div, exp;
scanf("%d", &n);
div = 2; //Incepem cautarea factorilor primi de la primul numar prim
while ( div * div <= n ) { //Cautam factorii primi pana la radicalul lui n
exp = 0;
while ( n % div == 0 ) {
n /= div;
exp++;
}
if (exp > 0)
printf("%d^%d\n", div, exp);
div++;
}
// daca n mai contine un factor, el este un numar prim la puterea unu
if ( n > 1 )
printf( "%d^1\n", n );
return 0;
}
Numarul de divizori si suma divizorilor
Fie descompunerea unui numar n in factori primi:
Numarul de divizori va fi
Suma divizorilor
Indicatorul lui Euler
Indicatorul lui Euler calculeaza numarul de numere din intervalul [1, n], prime cu n.
Ciurul lui Eratostene
Reamintim aici doar algoritmul studiat anul trecut:
char ciur[2000000];
...
fscanf( fin, "%d", &n );
ciur[0] = ciur[1] = 1;
for ( d = 2; d * d <= n; d++ )
if ( ciur[d] == 0 ) // daca d este prim
for ( i = d * d; i <= n; i = i + d ) // vom marca numerele din d in d
ciur[i] = 1;
Nu uitați:
- Vectorul ciur[] este de tip caracter și nu întreg!
- În final vectorul ciur[i] este 0 dacă numărul este prim sau 1 în caz contrar.
Complexitate? Matematica este complexă, dar rețineți că metoda este aproximativ O(n) pentru valorile lui n cu care vom lucra noi. Pentru cei interesați, complexitatea este de fapt O(n∙log log n).
Calculul multiplicității unui număr prim în n!
Matematicianul Adrien-Marie_Legendre a descoperit că multiplicitatea (exponentul) unui număr prim p care apare în descompunerea în factori primi a lui n! poate fi exprimată exact ca:
Acest fapt se bazează pe numărarea factorilor p ai întregilor de la 1 la n. Numărul multiplilor lui p în numerele de la 1 la n este ; dar această formulă numără numerele cu doi factori p o singură dată. De aceea trebuie să mai numărăm încă factori ai lui p. În mod similar pentru trei, patru, cinci factori, pînă la infinit. Însă suma este finită deoarece p i este mai mic sau egal cu n într-un număr finit de valori ale lui i, drept care funcția parte întreagă va fi zero pentru toate celelalte valori.
Cînd scriem programul pentru calculul exponentului ne vom opri la acel i pentru care pi > n.
Calculul multiplicității unui număr prim la o putere în n!
Este simplu de demonstrat că dacă avem un număr prim p la o putere k atunci multiplicitatea lui pk în n! este
Calculul multiplicității unui număr oarecare în n!
Este simplu să arătăm că dacă avem un număr a a cărui descompunere în factori primi este
- a = p1k1 • p2k2 • … • pmkm
atunci multiplicitatea (exponentul) lui a în n! este
sau
TEMA
Ciur
Ciur, Compactare Ciur
- prime1, campion2005 (inca nu e pusa)
http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=365
- sprime, XOR 2015 clasa a 9 a