Factorial


Editat de Candale Silviu (silviu) la data 2019-02-17

În matematică factorialul unui număr întreg pozitiv n este notat cu n! și este egal cu produsul numerelor naturale mai mici sau egale cu n. Prin definiție, 0!=1.

Factorialul unui număr oarecare n indică numărul de permutări (numărul de posibilități de rearanjare) ale unei mulțimi finite având n elemente.

Definiții

Factorialul poate fi definit:

  • iterativ: \( n! = 1 \cdot 2 \cdot 3 \cdot \cdots \cdot n \), \(0!=1\)
  • recursiv: \( n! = \begin{cases}
    1& \text{dacă } n = 0 ,\\
    n \cdot (n-1)! & \text{altfel}.
    \end{cases} \)

Observații

Obs. 1: Factorialul crește foarte repede. Pentru valori mici ale lui n, valoarea lui n! depășește tipurile de date standard:

0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
11! = 39916800
12! = 479001600
13! = 6227020800 -> depaseste tipul int  
14! = 87178291200
15! = 1307674368000
16! = 20922789888000
17! = 355687428096000
18! = 6402373705728000
19! = 121645100408832000
20! = 2432902008176640000 
21! = 51090942171709440000 -> depaseste tipul long long int

Obs. 2: Pentru n≥5, ultima cifră a lui n! este 0.

Cifra 0 de la finalul unui produs, provine din 2*5. Numărul de zerouri de la finalul unui este egal cu minimul dintre exponentul lui 2 și exponentul lui 5 în descompunerea în factori prim a produsului, aceasta obținându-se din descompunerea în factori prim a fiecărui factor. În cazul lui n!, numărul de zerouri de la final este egal cu exponentul lui 5 în descompunerea în factori. El poate fi determinat astfel:

Obs. 3: Numărul de zerouri de la finalul lui n! este egal cu \( [\frac {n}{5}] + [\frac {n}{5^2}] + [\frac {n}{5^3}] + \cdots\ + [\frac {n}{5^k}] + \cdots \), unde \( [x] \) reprezintă partea întreagă a numărului real \( x \). Pentru \( k \) suficient de mare \( 5^k > n\) și \( [\frac {n}{5^k}] \) devine 0.

O sursă C++ care determină rezultatul este:

#include <iostream>

using namespace std;

int main()
{
    int n, p = 5, s = 0;
    cin >> n;

    while(p <= n)
        s += n / p, p *= 5;

    cout << s;

    return 0;
}

Observația de mai sus este o consecință a:

Obs. 4: Pentru un n dat și un număr prim p, exponentul lui p în descompunerea în factori primi a lui n! este \( [\frac {n}{p}] + [\frac {n}{p^2}] + [\frac {n}{p^3}] + \cdots\ + [\frac {n}{p^k}] + \cdots \), rezultat cunoscut ca formula lui Legendre.

O scriere alternativă este următoarea:

Obs. 5: Pentru un n dat și un număr prim p, exponentul lui p în descompunerea în factori primi a lui n! este \( \frac {n-s_{p}(n)}{p-1}\), unde \( s_{p}(n)\) reprezintă suma cifrelor reprezentării în baza p a numărului n.

Pentru mai multe informații, vizitați pagina Factorial – Wikipedia.

Fișiere atașate