Skip to Content

Cantidad de divisores / suma de divisores

En este artículo discutimos cómo calcular la cantidad de divisores d(n)d(n) y la suma de divisores σ(n)\sigma(n) de un número dado nn.

Cantidad de divisores

Debería ser obvio que la factorización prima de un divisor dd tiene que ser un subconjunto de la factorización prima de nn; p. ej. 6=236 = 2 \cdot 3 es un divisor de 60=223560 = 2^2 \cdot 3 \cdot 5. Así que solo hay que hallar todos los subconjuntos distintos de la factorización prima de nn.

Usualmente la cantidad de subconjuntos es 2x2^x para un conjunto con xx elementos. Sin embargo esto ya no es cierto si hay elementos repetidos en el conjunto. En nuestro caso algunos factores primos pueden aparecer varias veces en la factorización prima de nn.

Si un factor primo pp aparece ee veces en la factorización prima de nn, entonces podemos usar el factor pp hasta ee veces en el subconjunto. Lo que significa que tenemos e+1e+1 elecciones.

Por lo tanto, si la factorización prima de nn es p1e1p2e2pkekp_1^{e_1} \cdot p_2^{e_2} \cdots p_k^{e_k}, donde los pip_i son números primos distintos, entonces la cantidad de divisores es:

d(n)=(e1+1)(e2+1)(ek+1)d(n) = (e_1 + 1) \cdot (e_2 + 1) \cdots (e_k + 1)

Una forma de pensarlo es la siguiente:

  • Si hay un solo divisor primo distinto n=p1e1n = p_1^{e_1}, entonces obviamente hay e1+1e_1 + 1 divisores (1,p1,p12,,p1e11, p_1, p_1^2, \dots, p_1^{e_1}).

  • Si hay dos divisores primos distintos n=p1e1p2e2n = p_1^{e_1} \cdot p_2^{e_2}, entonces se pueden disponer todos los divisores en forma de tabla.

1p2p22p2e211p2p22p2e2p1p1p1p2p1p22p1p2e2p12p12p12p2p12p22p12p2e2p1e1p1e1p1e1p2p1e1p22p1e1p2e2amp;1amp;p2amp;p22amp;amp;p2e21amp;1amp;p2amp;p22amp;amp;p2e2p1amp;p1amp;p1p2amp;p1p22amp;amp;p1p2e2p12amp;p12amp;p12p2amp;p12p22amp;amp;p12p2e2amp;amp;amp;amp;amp;p1e1amp;p1e1amp;p1e1p2amp;p1e1p22amp;amp;p1e1p2e2\begin{array}{c|ccccc} & 1 & p_2 & p_2^2 & \dots & p_2^{e_2} \\\hline 1 & 1 & p_2 & p_2^2 & \dots & p_2^{e_2} \\ p_1 & p_1 & p_1 \cdot p_2 & p_1 \cdot p_2^2 & \dots & p_1 \cdot p_2^{e_2} \\ p_1^2 & p_1^2 & p_1^2 \cdot p_2 & p_1^2 \cdot p_2^2 & \dots & p_1^2 \cdot p_2^{e_2} \\ \vdots & \vdots & \vdots & \vdots & \ddots & \vdots \\ p_1^{e_1} & p_1^{e_1} & p_1^{e_1} \cdot p_2 & p_1^{e_1} \cdot p_2^2 & \dots & p_1^{e_1} \cdot p_2^{e_2} \\ \end{array}

Así, la cantidad de divisores es trivialmente (e1+1)(e2+1)(e_1 + 1) \cdot (e_2 + 1).

  • Se puede hacer un argumento similar si hay más de dos factores primos distintos.
long long numberOfDivisors(long long num) { long long total = 1; for (int i = 2; (long long)i * i <= num; i++) { if (num % i == 0) { int e = 0; do { e++; num /= i; } while (num % i == 0); total *= e + 1; } } if (num > 1) { total *= 2; } return total; }

Suma de divisores

Podemos usar el mismo argumento de la sección anterior.

  • Si hay un solo divisor primo distinto n=p1e1n = p_1^{e_1}, entonces la suma es:

1+p1+p12++p1e1=p1e1+11p111 + p_1 + p_1^2 + \dots + p_1^{e_1} = \frac{p_1^{e_1 + 1} - 1}{p_1 - 1}

  • Si hay dos divisores primos distintos n=p1e1p2e2n = p_1^{e_1} \cdot p_2^{e_2}, entonces podemos hacer la misma tabla que antes. La única diferencia es que ahora queremos calcular la suma en lugar de contar los elementos. Es fácil ver que la suma de cada combinación se puede expresar como:

(1+p1+p12++p1e1)(1+p2+p22++p2e2)\left(1 + p_1 + p_1^2 + \dots + p_1^{e_1}\right) \cdot \left(1 + p_2 + p_2^2 + \dots + p_2^{e_2}\right)

=p1e1+11p11p2e2+11p21 = \frac{p_1^{e_1 + 1} - 1}{p_1 - 1} \cdot \frac{p_2^{e_2 + 1} - 1}{p_2 - 1}

  • En general, para n=p1e1p2e2pkekn = p_1^{e_1} \cdot p_2^{e_2} \cdots p_k^{e_k} obtenemos la fórmula:

σ(n)=p1e1+11p11p2e2+11p21pkek+11pk1\sigma(n) = \frac{p_1^{e_1 + 1} - 1}{p_1 - 1} \cdot \frac{p_2^{e_2 + 1} - 1}{p_2 - 1} \cdots \frac{p_k^{e_k + 1} - 1}{p_k - 1}

long long SumOfDivisors(long long num) { long long total = 1; for (int i = 2; (long long)i * i <= num; i++) { if (num % i == 0) { int e = 0; do { e++; num /= i; } while (num % i == 0); long long sum = 0, pow = 1; do { sum += pow; pow *= i; } while (e-- > 0); total *= sum; } } if (num > 1) { total *= (1 + num); } return total; }

Funciones multiplicativas

Una función multiplicativa es una función f(x)f(x) que satisface

f(ab)=f(a)f(b)f(a \cdot b) = f(a) \cdot f(b)

si aa y bb son coprimos.

Tanto d(n)d(n) como σ(n)\sigma(n) son funciones multiplicativas.

Las funciones multiplicativas tienen una enorme variedad de propiedades interesantes, que pueden ser muy útiles en problemas de teoría de números. Por ejemplo, la convolución de Dirichlet de dos funciones multiplicativas también es multiplicativa.

Problemas de práctica