--- tags: number-theory, multiplicative-functions, dirichlet-convolution, mobius-inversion, sieve --- # Funciones multiplicativas ## Función aritmética Sea $f : \mathbb{N} \to \mathbb{C}$ una función que va de los naturales a los números complejos. Entonces decimos que $f$ es *aritmética*. ## Función multiplicativa Sea $f(n)$ una función aritmética. Decimos que $f$ es *multiplicativa* si para dos enteros $m$ y $n$ tales que su $\gcd(m, n) = 1$, entonces $f(mn) = f(m)f(n)$. Vamos a asumir que $f(1)=1$. Esto se cumple, pues si $f \neq 0$, entonces $f(x) = f(x \cdot 1) = f(x)f(1)$, entonces $f(1)=1$. ## Teorema fundamental de la aritmética Para un entero positivo $n$, su factorización en primos es única (salvo el orden), y escribimos $n = p_1^{a_1} p_2^{a_2} \cdots p_k^{a_k}$. Este teorema es muy útil al evaluar funciones ariméticas multiplicativas, pues si $f$ es multiplicativa, entonces $f(n) = f(p_1^{a_1}) f(p_2^{a_2}) \cdots f(p_k^{a_k})$. Esto implica que cualquier función multiplicativa queda bien definida únicamente sabiendo su evaluación en potencias de primos. ## Ejemplos de funciones multiplicativas - Función identidad: $I(n) = n$. - Función constante: $\textbf{1}(n) = 1$. - Función potencia: $I_k(n) = n^k$. - Función identidad multiplicativa: $$ \epsilon(n) = \begin{cases} 1 & \text{ si $n = 1$} \\ 0 & \text{ si $n > 1$} \end{cases} $$ Notación: $\displaystyle \sum_{d | n} f(d)$ significa que la suma va a iterar sobre todos los divisores positivos $d$ de $n$. Ejemplo, $\displaystyle \sum_{d | 6} f(d) = f(1) + f(2) + f(3) + f(6)$. - Función de divisores: $\displaystyle \sigma_0(n) = \sum_{d | n} 1$. Esta función simplemente devuelve el número de divisores de $n$. - Función generalizada de divisores: $\displaystyle \sigma_k(n) = \sum_{d | n} d^k$. Esta función devuelve la suma de los divisores de $n$ elevados a la $k$-ésima potencia. En particular, si $k=1$, la función nos devuelve la suma de divisores. - Función Phi de Euler: $\varphi(n)$. Esta función nos devuelve el número de coprimos con $n$ entre $1$ y $n$. Tratemos de obtener una fórmula para $\varphi(p^a)$. Sabemos que entre los números del $1$ a $p^a$, $p^{a-1}$ son divisibles entre $p$. Por lo tanto $\varphi(p^a) = p^a - p^{a-1} = p^a \left( 1 - \dfrac{1}{p} \right)$. Por lo tanto, $\varphi(n) = \displaystyle \prod_{i=1}^{k}p_k^{a_k}\left( 1 - \dfrac{1}{p_k} \right) = \prod_{i=1}^{k}p_k^{a_k} \prod_{i=1}^{k} \left( 1 - \dfrac{1}{p_k} \right) = n \prod_{i=1}^{k} \left( 1 - \dfrac{1}{p_k} \right)$. - Función de Möbius: $\mu(n)$: $$ \mu(n) = \begin{cases} 1 & \text{ si $n$ es producto de un número par de primos distintos} \\ -1 & \text{ si $n$ es producto de un número impar de primos distintos} \\ 0 & \text{ si $n$ tiene algún factor primo repetido} \end{cases} $$ Notación: $$ [cond] = \begin{cases} 1 & \text{ si $cond$ es verdadera}\\ 0 & \text{ si $cond$ es falsa} \end{cases} $$ Ahora, veamos para cada una de las funciones anteriores, sus evaluaciones cuando $n=p^a$. - $I(p^a) = p^a$. - $\textbf{1}(p^a) = 1$. - $I_k(p^a) = p^{ak}$. - $\epsilon(p^a) = [p^a==1]$. - $\sigma_0(p^a) = a+1$. Otra forma de obtener esto es usando la fórmula anterior: $\displaystyle \sigma_0(p^a) = \sum_{d | p^a} 1 = \sum_{i=0}^{a} 1 = a+1$. - $\displaystyle \sigma_k(p^a) = \sum_{d | p^a} d^k = \sum_{i=0}^{a} (p^i)^k = \sum_{i=0}^{a} (p^k)^i = \dfrac{(p^k)^{a+1} - 1}{p^k - 1}$. - $\mu(p^a) = -[a==1]$. En general, cualquier función multiplicativa $f(n)$ se puede expresar como $f(p^a) = g(p, a)$, donde $g$ es cualquier función y $a \geq 1$. # Convolución de Dirichlet Sean $f$ y $g$ dos funciones aritméticas. Definimos a la *convolución de Dirichlet* de $f$ con $g$ como: $$ (f * g)(n) = \sum_{d | n} f(d) g \left( \dfrac{n}{d} \right) $$ Teorema: si $f$ y $g$ son multiplicativas, entonces $f * g$ también lo es. Propiedades: sean $f,g,h$ funciones aritméticas y $\alpha, \beta$ constantes. Entonces: - Conmutativa: $(f * g)(n) = (g * f)(n)$. - Asociativa: $((f * g) * h)(n) = (f * (g * h))(n)$ - Distributiva: $(f * (\alpha g + \beta h))(n) = (\alpha(f * g) + \beta(f * h))(n)$. ## Ejemplos - $\displaystyle (f * \epsilon)(n) = \sum_{d | n} f(d) \epsilon \left( \dfrac{n}{d} \right) = f(n)$. - $\displaystyle (\textbf{1} * \textbf{1})(n) = \sum_{d | n} 1 \cdot 1 = \sum_{d | n} 1 = \sigma_0(n)$. - $\displaystyle (I_k * \textbf{1})(n) = \sum_{d | n} I_k(d) \cdot 1 = \sum_{d|n} d^k = \sigma_k(n)$. - $\displaystyle (\varphi * \textbf{1})(n) = \sum_{d|n}\varphi(d) = n = I(n)$. Otra forma de obtener este resultado es usando el hecho de que tanto $\varphi$ como $\textbf{1}$ son multiplicativas. Hallemos: $$ \begin{align} (\varphi * \textbf{1})(p^a) &= \sum_{d | p^a} \varphi(d)\\ &= \sum_{i=0}^{a} \varphi(p^i)\\ &= 1 + \sum_{i=1}^{a} p^i \left( 1 - \dfrac{1}{p} \right)\\ &= 1 + \left( 1 - \dfrac{1}{p} \right) \dfrac{p^{a+1} - p}{p - 1} \\ &= 1 + \dfrac{p-1}{p} \cdot \dfrac{p^{a+1} - p}{p - 1} \\ &= 1 + \dfrac{p^{a+1}-p}{p} \\ &= 1 + p^a - 1 \\ &= p^a \\ &= I(p^a) \end{align} $$ Por lo tanto, $(\varphi * \textbf{1})(n) = I(n)$. - $$ \begin{align} (\sigma_k * \varphi)(n) &= ((I_k * \textbf{1}) * \varphi)(n)\\ &= (I_k * (\textbf{1} * \varphi))(n)\\ &= (I_k * I)(n)\\ &= \sum_{d|n} I_k(d) I \left( \dfrac{n}{d} \right) \\ &= \sum_{d|n} d^k \cdot \dfrac{n}{d} \\ &= n \sum_{d|n} d^{k-1} \\ &= I(n) \cdot \sigma_{k-1}(n) \end{align} $$ # Fórmula de inversión de Möbius Sean $f, g$ dos funciones aritméticas tales que $g(n) = \displaystyle \sum_{d | n} f(d)$. Entonces, $f(n) = \displaystyle \sum_{d | n} g(d) \mu \left( \dfrac{n}{d} \right)$. O de forma alternativa, si $g(n) = (f * \textbf{1})(n)$, entonces $f(n) = (g * \mu)(n)$. En particular, $(\mu * \textbf{1})(n) = \epsilon(n)$. *Demostración:* $$ \begin{align} (\mu * \textbf{1})(p^a) &= \sum_{d | p^a} \mu(d) \\ &= \sum_{i=0}^{a} \mu(p^i) \\ &= 1 + \sum_{i=1}^{a} \mu(p^i) \\ &= 1 - 1 = 0 \end{align} $$ Pero también sabemos que $(\mu * \textbf{1})(1) = 1$, entonces $(\mu * \textbf{1})(n) = \epsilon(n)$. $\square$ Por ejemplo, si $g(n) = (f * \textbf{1})(n)$, entonces: $$ \begin{align} g &= f * \textbf{1} \\ g * \mu &= f * \textbf{1} * \mu \\ g * \mu &= f * \epsilon \\ g * \mu &= f \end{align} $$ Ejemplos: - Sabemos que $\varphi * \textbf{1} = I$, entonces $\varphi = I * \mu$. - Sabemos que $I_k * \textbf{1} = \sigma_k$, entonces $I_k = \sigma_k * \mu$. ## Ejercicios ### Suma de gcd Sea $\displaystyle f(n) = \sum_{i=1}^{n} \gcd(i, n)$. Hallar $f(n)$, donde $n \leq 10^{18}$. Sabemos que $\gcd(i, n) = d$, donde $d | n$. Entonces, $\gcd(i/d, n/d) = 1$. Eso quiere decir que el valor de $d$ aparecerá exactamente $\varphi \left( \dfrac{n}{d} \right)$ veces en la suma. Por lo tanto, $\displaystyle f(n) = \sum_{d | n} d \cdot \varphi \left( \dfrac{n}{d} \right)$. Pero $f(n) = (I * \varphi)(n)$, y como $I$ y $\varphi$ son multiplicativas, $f$ también lo es. Entonces, $$ \begin{align} f(p^a) &= \sum_{d | p^a} d \cdot \varphi \left( \dfrac{p^a}{d} \right) \\ &= \sum_{i=0}^{a} p^i \cdot \varphi \left( \dfrac{p^a}{p^i} \right) \\ &= \sum_{i=0}^{a} p^i \cdot \varphi(p^{a-i}) \\ &= \sum_{i=0}^{a-1} p^i \cdot \varphi(p^{a-i}) + p^a \\ &= \sum_{i=0}^{a-1} p^i \cdot p^{a-i} \left( 1 - \dfrac{1}{p} \right) + p^a \\ &= \left( 1 - \dfrac{1}{p} \right) \sum_{i=0}^{a-1} p^a + p^a \\ &= \left( 1 - \dfrac{1}{p} \right) a p^a + p^a \\ &= \dfrac{p-1}{p} a p^a + p^a \\ &= p^a \left( a \dfrac{p-1}{p} + 1 \right) \\ &= p^a \left( \dfrac{a(p-1) + p}{p} \right) \\ &= p^{a-1} (a(p-1) + p) \end{align} $$ ### Suma de lcm Sea $f(n)=\displaystyle \sum_{i=1}^{n} \text{lcm}(i, n)$. Hallar $f(n)$, donde $n \leq 10^{18}$. Podemos reescribir a la suma como $f(n)=\displaystyle n\sum_{i=1}^{n} \dfrac{i}{\gcd(i, n)}$. De forma similar al ejercicio anterior, fijemos un divisor $d$ de $n$ tal que $\gcd(i, n) = d$. Entonces, $\gcd(i/d, n/d) = 1$ y $i=qd$ para algún entero $q$ ($1 \leq q \leq n/d$), por lo tanto, $\gcd(q, n/d)=1$ y la suma se puede reescribir como $f(n) = \displaystyle n \sum_{d | n} \sum_{\gcd(q, n/d)=1} q$. Sea $h(n) = \displaystyle \sum_{\gcd(q,n)=1} q$ la suma de todos los coprimos a $n$ menores o iguales a $n$. Entonces, $f(n) = \displaystyle n \sum_{d|n} h(n/d) = n\sum_{d|n} h(d)$. Para hallar a $h(n)$, supongamos que $n \geq 3$. Llamemos a todos los coprimos con $n$ de la siguiente forma: $q_1, q_2, \ldots, q_{\varphi(n)}$. Sabemos que $\gcd(q, n) = \gcd(n-q, n)$ y $q \neq n-q$, por lo tanto, también podemos nombrar a todos los coprimos como $n-q_1, n-q_2, \ldots, n-q_{\varphi(n)}$. Entonces, $h(n) = q_1 + q_2 + \cdots + q_{\varphi(n)}$, pero también $h(n) = n-q_1 + n-q_2 + \cdots + n-q_{\varphi(n)}$. Sumando ambas ecuaciones, tenemos que $2h(n)=n \varphi(n)$, por lo tanto $h(n) = \dfrac{1}{2} n\varphi(n)$. El argumento de numerar a los coprimos de esa forma no funciona si $n \leq 2$, pues hay un número impar de ellos. Sin embargo, cuando $n=2$ la fórmula también funciona, pero cuando $n=1$ hay que agregarle $1/2$ para corregirla, entonces podemos decir que $h(n)=\dfrac{1}{2} \left( n \varphi(n) + [n==1] \right)$ para toda $n \in \mathbb{N}$. Ya teniendo $h(n)$ lista, la sustituímos en $f(n)$: $f(n) = \displaystyle \dfrac{n}{2}\sum_{d|n} (d \varphi(d) + [d==1]) = \dfrac{n}{2} \left( 1 + \sum_{d|n} d \varphi(d) \right)$. Sea $t(n)= \displaystyle \sum_{d|n} d \varphi(d)$, vemos que $t(n)$ es multiplicativa y $f(n)=\dfrac{n}{2} (1 + t(n))$. Finalmente, hallemos $t(n)$ en una potencia de un primo: $$ \begin{align} t(p^a) &= \sum_{d | p^a} d \varphi(d) \\ &= \sum_{i=0}^{a} p^i \varphi(p^i) \\ &= 1 + \sum_{i=1}^{a} p^i p^i \left(1 - \dfrac{1}{p} \right) \\ &= 1 + \left(1 - \dfrac{1}{p} \right) \sum_{i=1}^{a} (p^2)^i \\ &= 1 + \dfrac{p-1}{p} \cdot \dfrac{(p^2)^{a+1} - p^2}{p^2-1} \\ &= 1 + \dfrac{p^{2a+1} - p}{p+1} \\ &= \dfrac{p^{2a+1} + 1}{p+1} \end{align} $$ # Criba lineal multiplicativa Queremos evaluar una función multiplicativa $f(n)$ para toda $n$ tal que $1 \leq n \leq N$ ($N \leq 10^7$). Una forma de hacerlo es factorizar todos los números hasta $N$ con la criba de factor primo más pequeño factorizando un número $x$ con complejidad $O(\log x)$, obteniendo una complejidad total de $O(N \log N)$. Para lograr una complejidad de $O(N)$, veamos la siguiente modificación de la criba de Eratostenes: - Sea $lp[d]$ el factor primo más pequeño de $d$. - Por lo tanto, si $lp[d] = p$, entonces $d = i \cdot p$, donde $p \leq lp[i]$. De esta forma, dicha representación para $d$ es única. Por lo tanto, la implementación de una criba con complejidad $O(N)$ queda como: ```c++ vector<int> sieve(int n){ vector<int> primes; vector<int> lp(n+1); for(int i = 2; i <= n; ++i){ if(lp[i] == 0){ primes.push_back(i); lp[i] = i; } for(int p : primes){ int d = i * p; if(d > n) break; lp[d] = p; if(p == lp[i]){ break; } } } return primes; } ``` Podemos modificar dicha criba para hallar la función multiplicativa, también con complejidad $O(N)$: ```c++ int g(int p, int a){ //Ejemplo para la phi de euler return power(p, a - 1) * (p - 1); } vector<int> sieve(int n){ vector<int> primes; vector<int> lp(n+1); //factor primo mas pequeño de i vector<int> f(n+1); //funcion multiplicativa evaluada en i vector<int> cnt(n+1); //exponente del primo mas pequeño de i vector<int> pot(n+1); //pow(lp[i], cnt[i]) f[1] = 1; for(int i = 2; i <= n; ++i){ if(lp[i] == 0){ primes.push_back(i); lp[i] = i; f[i] = g(i, 1); cnt[i] = 1; pot[i] = i; } for(int p : primes){ int d = i * p; if(d > n) break; lp[d] = p; if(p == lp[i]){ // p = lp[i] // gcd(p, i) = p f[d] = f[i / pot[i]] * g(p, cnt[i]+1); cnt[d] = cnt[i] + 1; pot[d] = pot[i] * p; break; }else{ // p < lp[i] // gcd(p, i) = 1 f[d] = f[i] * f[p]; cnt[d] = 1; pot[d] = p; } } } return f; } ```