---
tags: fft, ntt, polynomials, newton-raphson, inverse, square-root, logarithm, exponential, taylor-series, divide-and-conquer, power-series, generating-functions
---
# Operaciones con polinomios
## Método de Newton-Raphson
Sea $f(x)$ una función a la cual queremos hallarle sus raíces, es decir, qué valores de $x$ hacen que $f(x)=0$. Por ejemplo, si $f(x)=x^2-a$, entonces una raíz es $x=\sqrt{a}$.
El algoritmo funciona de la siguiente manera:
- Proponemos un valor inicial $x_0$ que esté cercano a la raíz que queremos encontrar.
- Hacemos la iteración $x_{n+1} = x_n - \dfrac{f(x_n)}{f'(x_n)}$ para refinar el valor anterior de $x_n$ y que vaya convergiendo cada vez más a la raíz buscada.
- Repetimos el paso anterior hasta que lleguemos a la precisión deseada.
Por ejemplo, si $f(x)=x^2-a$, entonces $f'(x)=2x$, y las iteraciones quedan como:
$$
x_{n+1} = x_{n} - \dfrac{x_n^2-a}{2x_n} = \dfrac{2x_n^2-(x_n^2-a)}{2x_n} = \dfrac{x_n^2+a}{2x_n}
$$
Podemos hallar la raíz $k$-ésima usando este mismo método, simplemente cambiamos $f(x)$ a $f(x)=x^k-a$, entonces $f'(x)=kx^{k-1}$ y la iteración es:
$$
x_{n+1} = x_{n} - \dfrac{x_n^k-a}{kx_n^{k-1}} = \dfrac{(k-1)x_n^k+a}{kx_n^{k-1}}
$$
Ahora supongamos que tenemos una función $F(P)$, donde $P$ es un polinomio. Podemos adaptar este método para hallar el polinomio que cumpla que $F(P)=0$.
Por ejemplo, si $F(P)=P^k-A$, entonces al hacer $F(P)=0$ hallaremos un $P$ tal que $P^k-A=0$, o sea, $P=\sqrt[k]{A}$. Resulta que también podemos usar el método de Newton para ir hallando de forma iterativa los coeficientes de $P$:
- Tenemos que proponer un polinomio inicial de grado cero $P_0$ tal que $P_0=p_0$, donde $p_0$ sea correcto.
- En la $n$-ésima iteración ($n \geq 1$), hacemos $P_n \equiv P_{n-1} - \dfrac{F(P_{n-1})}{F'(P_{n-1})} \mod{x^{2^n}}$. Vemos que en cada iteración se duplica el número correcto de coeficientes de $P$.
### Inverso multiplicativo
Supongamos que queremos hallar el inverso multiplicativo de una serie de potencias $A(x)$ dada por $A(x)=a_0+a_1x+a_2x^2+\cdots$.
Sea $F(P) = A - \dfrac{1}{P}$, entonces $F(P)=0$ implica que $P=\dfrac{1}{A}$, que es justo lo que queremos. Tenemos que $F'(P)=\dfrac{1}{P^2}$, y las iteraciones quedan como:
$$
\begin{align}
P_n &\equiv P_{n-1} - \dfrac{A-\frac{1}{P_{n-1}}}{\frac{1}{P_{n-1}^2}} &\mod{x^{2^n}} \\
&\equiv P_{n-1}-P_{n-1}^2 \left( A-\frac{1}{P_{n-1}} \right) &\mod{x^{2^n}} \\
&\equiv P_{n-1} - P_{n-1}^2 A + P_{n-1} &\mod{x^{2^n}} \\
&\equiv 2P_{n-1} - P_{n-1}^2 A &\mod{x^{2^n}}
\end{align}
$$
El término inicial $a_0$ tiene que cumplir que $a_0 - \frac{1}{p_0} = 0$, es decir, $p_0 = \frac{1}{a_0}$. De aquí vemos que $P(x)$ existe si y solo si $a_0 \neq 0$.
Sea $T(n)$ complejidad de hallar el inverso de $A$ con $n$ coeficientes de precisión. Tenemos que $T(n)=T(n/2) + O(n \log n)$, pues necesitamos primero el inverso con precisión $n/2$ y de acuerdo a la recurrencia de la iteración, requerimos una multiplicación con polinomios de tamaño $n$, la cual podemos hacer con FFT con complejidad de $O(n \log n)$. Resolviendo la recurrencia, tenemos que $T(n) = O(n \log n)$.
### Raíz cuadrada
Ahora hallemos $\sqrt{A(x)}$.
Sea $F(P)=P^2-A$, para hallar el primer término $p_0$ necesitamos que $p_0^2=a_0$, es decir, $p_0=\sqrt{a_0}$. Después procedemos con las iteraciones:
$$
\begin{align}
P_n &\equiv \dfrac{P_{n-1}^2+A}{2P_{n-1}} &\mod{x^{2^n}} \\
&\equiv \dfrac{1}{2} \left( P_{n-1} + \dfrac{A}{P_{n-1}} \right) &\mod{x^{2^n}}
\end{align}
$$
Vemos que para hallar $\dfrac{A}{P_{n-1}}$, tenemos que usar el inverso de $P_{n-1}$, que es justo la operación que vimos antes.
Si los coeficientes de $A$ pertenecen a un campo finito módulo $p$, es decir, $a_i \in \mathbb{F}_p$, necesitamos garantizar que la raíz cuadrada de $a_0$ exista y sea distinta de cero.
La complejidad es $O(n \log n)$.
### Logaritmo
Ahora vamos a hallar el logaritmo natural de $A(x)$, y le vamos a llamar $\ln(A)$. Dicho logaritmo cumplirá todas las propiedades de un logaritmo ordinario en los números reales.
Sea $P(x)=\ln(A(x))$, entonces al derivar ambos lados respecto de $x$ obtenemos $P'(x) = \dfrac{A'(x)}{A(x)}$. Finalmente, integramos ambos lados respecto a $x$ y obtenemos:
$$
P(x) = \int \dfrac{A'(x)}{A(x)} dx
$$
Si los coeficientes de $A$ pertenecen a un campo finito, entonces requerimos que $a_0=1$, pues tenemos que $\ln(A) = \ln(a_0 + a_1x + a_2x^2 + \cdots) = \ln\left(a_0\left(1+\frac{a_1}{a_0}x + \frac{a_2}{a_0}x^2+\cdots\right)\right) = \ln(a_0) + \ln\left(1+\frac{a_1}{a_0}x + \frac{a_2}{a_0}x^2+\cdots\right)$, y $\ln(a_0)$ no está definido en un campo finito, a menos que $a_0=1$, pues $\ln(1)=0$ y el $0$ sí existe.
### Exponencial
Vamos a hallar la exponencial de $A(x)$, y le vamos a llamar $\exp(A)$ o $e^A$.
Sea $F(P) = A-\ln(P)$, entonces $F(P)=0$ implica que $P=\exp(A)$, que es justo lo que queremos.
Tenemos que $F'(P) = -\dfrac{1}{P}$, y las iteraciones quedan como:
$$
\begin{align}
P_n &\equiv P_{n-1} - \dfrac{A-\ln(P_{n-1})}{-\frac{1}{P_{n-1}}} &\mod{x^{2^n}} \\
&\equiv P_{n-1}+P_{n-1}(A-\ln(P_{n-1})) &\mod{x^{2^n}} \\
&\equiv P_{n-1}(1+A-\ln(P_{n-1})) &\mod{x^{2^n}}
\end{align}
$$
Si los coeficientes de $A$ pertenecen a un campo finito, entonces requerimos que $a_0=0$, pues tenemos que $e^A = e^{a_0+a_1x+a_2x^2+\cdots} = e^{a_0}e^{a_1x+a_2x^2+\cdots}$, y $e^{a_0}$ no está definido en un campo finito, a menos que $a_0=0$, pues $e^0=1$ y el $1$ sí existe. De hecho, el término inicial de $P$ sería entonces $p_0=e^{a_0}=1$.
### $k$-ésima potencia de una serie de potencias
Usando la exponencial y el logaritmo, podemos hallar $[A(x)]^k$ con una complejidad que no depende de $k$. Por ahora supongamos que $a_0=1$. Sea $P=A^k$, si tomamos logaritmo a ambos lados obtenemos $\ln(P)=\ln(A^k)=k\ln(A)$, entonces $P=\exp(k\ln(A))$.
En el caso general cuando $a_0 \neq 1$, podemos representar a $A(x)$ de forma única como $A(x)=\alpha x^t B(x)$, donde $\alpha$ es el primer coeficiente distinto de cero en $A(x)$, $t$ es la mínima posición en donde aparece y $B(x)$ es otra serie de potencias ya ahora sí con $b_0=1$. Entonces, $P=A^k=\alpha^k x^{kt} \exp(k \ln(B))$.
Aquí $k$ ni siquiera necesita ser un número entero. Por ejemplo, si $k=\frac{1}{2}$, obtenemos un método adicional para hallar la raíz cuadrada de $A$.
Por ejemplo, si $A(x)=3x^2+6x^3+7x^4+10x^5$, entonces $A(x)=\underbrace{3}_{\alpha} \underbrace{x^2}_{x^t} (\underbrace{1+2x+(7/3)x+(10/3)x^2}_{B(x)})$.
### Cociente y residuo
Sean $A(x)$ y $B(x)$ dos polinomios de grados $n$ y $m$ respectivamente. Queremos hallar otros dos polinomios $Q(x)$ y $R(x)$ tales que $A(x) = B(x)Q(x) + R(x)$, donde $deg(R) < deg(B)$. Es decir, una generalización al algoritmo de la división, en donde dividimos $A(x)$ entre $B(x)$ para obtener un cociente $Q(x)$ y un residuo $R(x)$.
Supongamos que $n \geq m$ (en otro caso el cociente es $Q(x)=0$ y el residuo es $R(x)=A(x)$), entonces $deg(Q)=n-m$. Sean $A^R(x)$ y $B^R(x)$ los polinomios $A(x)$ y $B(x)$ con los coeficientes en reversa, es decir:
$$
\begin{align}
A^R(x) &= x^n A(1/x) = a_n + a_{n-1}x + \cdots + a_0 x^n \\
B^R(x) &= x^m B(1/x) = b_m + b_{m-1}x + \cdots + b_0 x^m
\end{align}
$$
Ahora veamos cómo queda el cociente $Q(x)$ de reversa:
$$
\begin{align}
Q^R(x) &= x^{n-m} Q(1/x) = q_{n-m} + q_{n-m+1}x + \cdots + q_0 x^{n-m}
\end{align}
$$
De la ecuación principal $A(x)=B(x)Q(x)+R(x)$, reverseamos ambos lados y obtenemos:
$$
\begin{align}
A^R(x) &= (B(x)Q(x) + R(x))^R \\
&= x^n(B(1/x)Q(1/x) + R(1/x)) \\
&= x^m B(1/x)x^{n-m}Q(1/x) + x^nR(1/x) \\
&= B^R(x)Q^R(x) + x^n \left(r_0 + r_1 x^{-1} + \cdots + r_{deg(R)}x^{-deg(R)} \right) \\
&= B^R(x)Q^R(x) + \left(r_0 x^n + r_1 x^{n-1} + \cdots + r_{deg(R)}x^{n-deg(R)} \right)
\end{align}
$$
El polinomio entre paréntesis tiene como mínima potencia de $x$ a $n-deg(R)$, y como $deg(R) < m$, entonces $n-deg(R) > n-m$, es decir, tiene potencias únicamente mayores o iguales a $n-m+1$. Por lo tanto, si tomamos ambos lados de la última igualad módulo $x^{n-m+1}$, vamos a cancelar ese polinomio entre paréntesis, y nos quedamos con:
$$
A^R(x) \equiv B^R(x)Q^R(x) \mod x^{n-m+1}
$$
Y de ahí podemos despejar $Q^R(x)$ usando el inverso multiplicativo de $B^R(x)$, que ya sabemos cómo calcular:
$$
Q^R(x) \equiv \dfrac{A^R(x)}{B^R(x)} \mod x^{n-m+1}
$$
Finalmente, teniendo $Q^R(x)$ lo podemos reversear de nuevo y obtener $Q(x)$, y para hallar $R(x)$ simplemente lo despejamos: $R(x)=A(x)-B(x)Q(x)$. La complejidad de todo esto sigue siendo $O(n \log n)$.
## Series de potencias famosas y series de Taylor
- $\exp(x) = 1 + x + \dfrac{x^2}{2!} + \dfrac{x^3}{3!} + \cdots$
- $\dfrac{1}{1-x} = 1 + x + x^2 + x^3 + \cdots$
- $\dfrac{1}{1+x} = 1 - x + x^2 - x^3 + \cdots$
- $\ln(1+x) = x - \dfrac{x^2}{2} + \dfrac{x^3}{3} - \dfrac{x^4}{4} + \cdots$
- $\ln(1-x) = -x - \dfrac{x^2}{2} - \dfrac{x^3}{3} - \dfrac{x^4}{4} - \cdots$
- $\displaystyle (1+x)^n = \sum_{k=0}^{n} \binom{n}{k} x^k$ , $\quad n \in \mathbb{N}$
- $\displaystyle (1+x)^\alpha = 1 + \dfrac{\alpha}{1!} x + \dfrac{\alpha(\alpha-1)}{2!} x^2 + \dfrac{\alpha(\alpha-1)(\alpha-2)}{3!} x^3 + \cdots$ , $\quad \alpha \in \mathbb{R}$
- $\displaystyle \dfrac{1}{(1-x)^k} = \sum_{n=0}^{\infty} \binom{n+k-1}{k-1} x^n$ , $\quad k \in \mathbb{N}$
## Problemas
### [Subset sum](https://judge.yosupo.jp/problem/sharp_p_subset_sum)
:::spoiler **Descripción**
Dados $N$ ($N \leq 10^6$) enteros positivos $s_0, s_1, \ldots, s_{N-1}$ y un entero positivo $T$ ($T \leq 5 \times 10^5$, $s_i \leq T$), determinar de cuántas maneras podemos escoger algunos valores $s_i$ tales que su suma es $t$, para cada $t=1,2,\ldots,T$. Dos maneras son distintas si los conjuntos de los índices de las $s_i$'s escogidas en cada manera son diferentes.
:::
:::spoiler **Ejemplo**
Si $S=[1,1,2,2,3]$ y $T=3$, entonces:
- Para $t=1$ hay 2 formas: $s_0 = s_1 = 1$
- Para $t=2$ hay 3 formas: $s_0+s_1 = s_2 = s_3 = 2$
- Para $t=3$ hay 5 formas: $s_0+s_2 = s_0+s_3 = s_1+s_2 = s_1+s_3 = s_4 = 3$
Entonces la respuesta es $[2,3,5]$.
:::
:::spoiler **Solución**
Sea $\displaystyle F(x) = \prod_{i=0}^{N-1} (1+x^{s_i})$, donde el coeficiente de $x^t$ en $F(x)$ es la respuesta para cada $t$. Tomemos logaritmo a ambos lados:
$$
\begin{align}
\ln(F) &= \ln \left( \prod_{i=0}^{N-1} (1+x^{s_i}) \right) \\
&= \sum_{i=0}^{N-1} \ln(1+x^{s_i}) \\
&= \sum_{i=0}^{N-1} \sum_{j=1}^{\infty} \dfrac{(x^{s_i})^j}{j} (-1)^{j-1} \\
&= \sum_{j=1}^{\infty} \dfrac{(-1)^{j-1}}{j} \sum_{i=0}^{N-1} x^{s_i j}
\end{align}
$$
Si suponemos que todas las $s$'s son distintas, entonces podemos hallar la suma anterior con una complejidad de $T+T/2+T/3+\cdots+T/T = O(T \log T)$. Si hay $s$'s repetidas, simplemente calculamos la frecuencia de cada elemento y la tomamos en cuenta en la suma:
$$
\ln(F) = \sum_{j=1}^{\infty} \dfrac{(-1)^{j-1}}{j} \sum_{i=1}^{T} x^{i j} freq[i]
$$
Finalmente, tomamos la exponencial a ambos lados:
$$
F(x) = \exp\left(\sum_{j=1}^{\infty} \dfrac{(-1)^{j-1}}{j} \sum_{i=1}^{T} x^{i j} freq[i]\right)
$$
Por lo tanto, la complejidad total queda como $O(T \log T)$.
:::
### [Progresión aritmético-geométrica finita](https://judge.yosupo.jp/problem/sum_of_exponential_times_polynomial)
### [Progresión aritmético-geométrica infinita](https://judge.yosupo.jp/problem/sum_of_exponential_times_polynomial_limit)
### [Linear Diophantine Equation](https://www.spoj.com/problems/COUNTDIO/)
:::spoiler **Descripción**
Hallar el número de soluciones en los enteros no negativos de la ecuación $a_1 x_1 + a_2 x_2 + \ldots + a_n x_n = m$, donde:
- $1 \leq n \leq 6 \times 10^4$
- $1 \leq m \leq 10^{18}$
- $1 \leq a_i \leq 6 \times 10^4$
- $1 \leq a_1 + a_2 + \cdots + a_n \leq 6 \times 10^4$
:::
:::spoiler **Ejemplo**
Si la ecuación es $a_1+2a_2=6$, tenemos 4 soluciones, que son $(0,3)$, $(2,2)$, $(4,1)$ y $(6,0)$.
:::
:::spoiler **Solución**
:::
### [Particiones de un entero](https://judge.yosupo.jp/problem/partition_function)
:::spoiler **Descripción**
Sea $p(n)$ el número de formas de escribir el entero positivo $n$ como una suma de enteros positivos, sin importar el orden. Hallar $p(n)$ para $n=0,1,2,\ldots,N$ ($N \leq 5 \times 10^5$).
:::
:::spoiler **Ejemplo**
Si $n=4$, lo podemos escribir de 5 maneras como:
- $4 = 1+1+1+1$
- $4 = 1+1+2$
- $4 = 1+3$
- $4 = 2+2$
- $4 = 4$
Por lo tanto, $p(4)=5$.
:::
:::spoiler **Solución**
Podemos representar cada partición de $n$ de forma única con la frecuencia de sus sumandos. Es decir, hay que resolver la ecuación $x_1 + 2x_2 + 3x_3 + \cdots + nx_n = n$, donde $x_i$ es la frecuencia del sumando $i$, y $x_i \geq 0$. El número de soluciones es entonces igual a $p(n)$.
Por cada sumando, propongamos un polinomio que represente a todos los posibles valores que podemos colocar ahí, entonces al multiplicarlos todos nos fijamos en el coeficiente de $x^n$, y eso será igual a $p(n)$. Es decir:
$$
\begin{align}
F(x) &= \prod_{i=1}^{n} (1+x^i+x^{2i}+x^{3i}+\cdots) \\
&= \prod_{i=1}^{n} \dfrac{1}{1-x^i}
\end{align}
$$
Tomamos logaritmo a ambos lados:
$$
\begin{align}
\ln(F) &= \sum_{i=1}^{n} \ln\left(\dfrac{1}{1-x^i}\right) \\
&= -\sum_{i=1}^{n} \ln(1-x^i) \\
&= \sum_{i=1}^{n} \sum_{j=1}^{\infty} \dfrac{(x^i)^j}{j} \\
&= \sum_{j=1}^{\infty} \dfrac{1}{j} \sum_{i=1}^{n} x^{ij}
\end{align}
$$
Finalmente, tomamos la exponencial a ambos lados:
$$
F(x) = \exp\left( \sum_{j=1}^{\infty} \dfrac{1}{j} \sum_{i=1}^{n} x^{ij} \right)
$$
La complejidad total es entonces $O(n \log n)$.
:::
### [Sum of Fibonacci Sequence](https://atcoder.jp/contests/s8pc-3/tasks/s8pc_3_g)
:::spoiler **Descripción**
Sea $f_n$ la sucesión de Fibonacci, donde $f_0=0$, $f_1=1$ y $f_k=f_{k-1}+f_{k-2}$ para $k \geq 2$.
Definimos las sucesiones $g_1, g_2, \ldots, g_n$ como:
- $g_{1,j} = f_j$
- Para $i \geq 2$: $\displaystyle g_{i,j} = \sum_{k=0}^{j} g_{i-1, k}$
Hallar $g_{n,m}$ ($1 \leq n \leq 2 \times 10^5$, $1 \leq m \leq 10^{18}$).
:::
:::spoiler **Ejemplo**
Si $n=4$ y $m=6$, podemos ver las suceciones $d_i$ en la siguiente tabla:
| | $d_{i,0}$ | $d_{i,1}$ | $d_{i,2}$ | $d_{i,3}$ | $d_{i,4}$ | $d_{i,5}$ | $d_{i,6}$ |
| - | - | - | - | - | - | - | - |
| $d_1$ | 0 | 1 | 1 | 2 | 3 | 5 | 8 |
| $d_2$ | 0 | 1 | 2 | 4 | 7 | 12 | 20 |
| $d_3$ | 0 | 1 | 3 | 7 | 14 | 26 | 46 |
| $d_4$ | 0 | 1 | 4 | 11 | 25 | 51 | 97 |
Por lo tanto, $d_{4,6}=97$.
:::
:::spoiler **Solución**
:::
### [Parity Party](https://www.hackerrank.com/challenges/parity-party/problem)
:::spoiler **Descripción**
Tenemos $n$ dulces ++etiquetados++ del $1$ al $n$ ($1 \leq n \leq 10^9$), los cuales queremos repartir entre todas las personas de una fiesta. En la fiesta hay tres tipos de personas:
- $a$ personas quieren recibir un número impar de dulces.
- $b$ personas quieren recibir un número par de dulces.
- $c$ personas quieren recibir cualquier cantidad de dulces.
Hallar el número de formas de dividir los $n$ dulces entre todas las $a+b+c$ personas ($1 \leq a+b+c$, $0 \leq a,b,c \leq 5 \times 10^4$), tal que todas estén satisfechas.
:::
:::spoiler **Ejemplo**
Si $a=1$, $b=1$, $c=0$ y $n=3$, tenemos 3 dulces, digamos que son $d_1$, $d_2$ y $d_3$. Hay 4 maneras de repartirlos entre las 2 personas:
| | Persona 1° (impar) | Persona 2° (par) |
| - | - | - |
| 1° | $\{d_1\}$ | $\{d_2, d_3\}$ |
| 2° | $\{d_2\}$ | $\{d_1, d_3\}$ |
| 3° | $\{d_3\}$ | $\{d_1, d_2\}$ |
| 4° | $\{d_1, d_2, d_3\}$ | $\{\}$ |
Notemos la diferencia entre dulces etiquetados y no etiquetados:
- En el caso no etiquetado solo nos importa la cantidad de dulces que recibe cada persona (todos los dulces son indistinguibles).
- En el caso etiquetado nos importa la cantidad de dulces que recibe cada persona y qué dulces recibe (todos los dulces son distintos a pares).
Si el problema trabajara con dulces no etiquetados, la respuesta para este ejemplo sería 2:
| | Persona 1° (impar) | Persona 2° (par) |
| - | - | - |
| 1° | 1 dulce | 2 dulces |
| 2° | 3 dulces | 0 dulces |
:::
:::spoiler **Solución**
Primero resolvamos la versión no etiquetada. Tenemos una ecuación de la siguiente forma: $(x_1 + x_2 + \cdots + x_a) + (y_1 + y_2 + \cdots + y_b) + (z_1 + z_2 + \cdots + z_c) = n$, donde cada incógnita representa a una persona. Las restricciones son que las $x_i$ son impares, las $y_i$ son pares y las $z_i$ no tienen restricción adicional. Entonces el problema se reduce a hallar el número de soluciones de dicha ecuación.
Sea $X(z) = z + z^3 + z^5 + \cdots = \dfrac{z}{1-z^2}$, $Y(z)=1+z^2+z^4+ \cdots = \dfrac{1}{1-z^2}$, $Z(z) = 1+z+z^2+z^3+\cdots = \dfrac{1}{1-z}$. Sea $F(z)$ la función generadora de la respuesta, entonces $F(z)=[X(z)]^a [Y(z)]^b [Z(z)]^c = \dfrac{z^a}{(1-z^2)^{a+b}(1-z)^c}$, y la respuesta estará en el coeficiente de $z^n$ de $F(z)$.
Regresando al problema sí etiquetado, vemos que por cada solución no etiquetada, podemos generar varias soluciones etiquetadas. Las vamos a generar hallando todas las posibles formas de repartir los dulces entre las personas. Supongamos que tenemos una solución particular $(x'_1, x'_2, \ldots, x'_a, y'_1, y'_2, \ldots, y'_b, z'_1, z'_2, \ldots, z'_c)$. Entonces, el número de soluciones etiquetadas es igual al coeficiente multinomial $\displaystyle \binom{n}{x'_1, x'_2, \ldots, x'_a, y'_1, y'_2, \ldots, y'_b, z'_1, z'_2, \ldots, z'_c}$, por lo tanto hay que modificar las funciones $X(z)$, $Y(z)$ y $Z(z)$.
Quedan de la siguiente manera:
$$
\begin{align}
X(z) &= \dfrac{1}{1!}z + \dfrac{1}{3!}z^3 + \dfrac{1}{5!}z^5 + \cdots = \sinh(z) = \dfrac{e^z - e^{-z}}{2} \\
Y(z) &= \dfrac{1}{0!} + \dfrac{1}{2!}z^2 + \dfrac{1}{4!}z^4 + \cdots = \cosh(z) = \dfrac{e^z + e^{-z}}{2} \\
Z(z) &= \dfrac{1}{0!} + \dfrac{1}{1!}z + \dfrac{1}{2!}z^2 + \cdots = e^z
\end{align}
$$
En el caso de ejemplo, vemos que queremos el coeficiente de $z^3$ multiplicado por $3!$ de $X(z)Y(z)$, que es igual a $\displaystyle \dfrac{3!}{1! \cdot 2!} + \dfrac{3!}{3! \cdot 0!} = \binom{3}{1} + \binom{3}{3} = 4$.
De forma general, quiero el coeficiente de $z^n$ multiplicado por $n!$ de $G(z)=[X(z)]^a [Y(z)]^b [Z(z)]^c$. Eso es igual a:
$$
\begin{align}
G(z) &= \left( \dfrac{e^z - e^{-z}}{2} \right)^a \left( \dfrac{e^z + e^{-z}}{2} \right)^b (e^z)^c \\
&= \left( \dfrac{e^z - 1/e^z}{2} \right)^a \left( \dfrac{e^z + 1/e^z}{2} \right)^b (e^z)^c \\
&= \left( \dfrac{e^{2z} - 1}{2e^z} \right)^a \left( \dfrac{e^{2z} + 1}{2e^z} \right)^b (e^z)^c \\
&= \dfrac{(e^{2z}-1)^a (e^{2z}+1)^b (e^z)^c}{2^{a+b}(e^z)^{a+b}} \\
&= \dfrac{(e^{2z}-1)^a (e^{2z}+1)^b (e^z)^{c-a-b}}{2^{a+b}}
\end{align}
$$
Sea $t=e^z$, entonces $G(z) = \dfrac{(t^2-1)^a (t^2+1)^b t^{c-a-b}}{2^{a+b}}$. Hallemos $(t^2-1)^a$ y $(t^2+1)^b$ con coeficiente binomial y los multiplicamos con NTT. Entonces, $(t^2-1)^a (t^2+1)^b = \sum_{k=0}^{2(a+b)} p_k t^k$, por lo tanto:
$$
\begin{align}
G(z) &= \dfrac{\sum_{k=0}^{2(a+b)} p_k t^k t^{c-a-b}}{2^{a+b}} \\
&= \dfrac{\sum_{k=0}^{2(a+b)} p_k t^{k+c-a-b}}{2^{a+b}} \\
&= \dfrac{\sum_{k=0}^{2(a+b)} p_k e^{(k+c-a-b)z}}{2^{a+b}}
\end{align}
$$
Por serie de Taylor, sabemos que $e^{\alpha z} = 1 + \alpha z + \dfrac{\alpha^2}{2!}z^2 + \dfrac{\alpha^3}{3!}z^3 + \cdots$, de donde vemos que el coeficiente de $z^n$ es $\dfrac{\alpha^n}{n!}$. Por lo tanto, como $G(z)$ es una suma de exponenciales, por cada una tomamos el coeficiente de $z^n$, sin olvidar multiplicar al final por $n!$:
$$
\begin{align}
ans &= n! \cdot \dfrac{\sum_{k=0}^{2(a+b)} p_k (k+c-a-b)^n / n!}{2^{a+b}} \\
&= \dfrac{\sum_{k=0}^{2(a+b)} p_k (k+c-a-b)^n}{2^{a+b}}
\end{align}
$$
Al final, tenemos una complejidad de $O((a+b)\log(a+b) + (a+b)\log(n))$.
:::
### [The Child and Binary Tree](https://codeforces.com/problemset/problem/438/E)
:::spoiler **Descripción**
Definimos al *peso* de un árbol binario como la suma de los pesos de todos sus nodos. Determinar, para cada $s=1,2,\ldots,m$, cuántos árboles binarios existen con peso igual a $s$, donde los pesos de los nodos los tomaremos de un conjunto dado de $n$ enteros positivos distintos $\{c_1,c_2,\ldots,c_n\}$. Los límites son $1 \leq n, m, c_i \leq 10^5$.
:::
:::spoiler **Ejemplo**
Si $m=3$ y el conjunto de pesos posibles es $\{1,2\}$, tenemos los siguientes árboles:
- Para $s=1$, solo tenemos 1 árbol:
![](https://i.imgur.com/00Lkv9n.png)
- Para $s=2$, tenemos 3 árboles:
![](https://i.imgur.com/ZZAK4MU.png)
- Para $s=3$, tenemos 9 árboles:
![](https://i.imgur.com/qjcnTSm.png)
:::
:::spoiler **Solución**
Primero resolvamos un problema más sencillo: determinar cuántos árboles binarios existen con $k$ nodos. Sea $C_k$ dicho conteo, tenemos que $C_0=1$ y tenemos la recurrencia:
$$
\begin{align}
C_k &= C_0 C_{k-1} + C_1 C_{k-2} + C_2 C_{k-3} + \cdots + C_{k-1} C_0 \\
&= \sum_{i=0}^{k-1} C_i C_{k-1-i}
\end{align}
$$
Dicha recurrencia funciona, pues para construir un árbol de $k$ nodos, podemos colocar 1 nodo como raíz y redistribuir los $k-1$ nodos restantes de las siguientes maneras:
- Un subárbol de $0$ nodos del lado izquierdo y un subárbol de $k-1$ nodos del lado derecho.
- Un subárbol de $1$ nodos del lado izquierdo y un subárbol de $k-2$ nodos del lado derecho.
- ...
- Un subárbol de $k-1$ nodos del lado izquierdo y un subárbol de $0$ nodos del lado derecho.
Hallemos la función generadora de la sucesión $C_k$, es decir, $F(x)=C_0 + C_1x + C_2x^2 + C_3x^3 + \cdots$. Vemos que el coeficiente de $x^k$ nos dice el valor de $C_k$. Vamos a obtener una fórmula cerrada para $F(x)$, para ello vamos a sustituir la definición de cada $C_k$:
$$
\begin{align}
F(x) &= 1 + (C_0 C_0)x + (C_0 C_1 + C_1 C_0)x^2 + (C_0 C_2 + C_1 C_1 + C_2 C_0)x^3 + \cdots
\end{align}
$$
Vemos que los coeficientes se parecen a una convolución de la secuencia $C_k$ con ella misma. Veamos a qué es igual $F(x)^2$:
$$
\begin{align}
F(x)^2 &= C_0 C_0 + (C_0 C_1 + C_1 C_0)x + (C_0 C_2 + C_1 C_1 + C_2 C_0)x^2 + \cdots
\end{align}
$$
Relacionando ambas igualdades, tenemos que:
$$
\begin{align}
F(x) &= 1 + x(C_0 C_0 + (C_0 C_1 + C_1 C_0)x + (C_0 C_2 + C_1 C_1 + C_2 C_0)x^2 + \cdots) \\
&= 1 + xF(x)^2
\end{align}
$$
Por lo tanto, tenemos que $F(x)=1+xF(x)^2$, reacomodamos: $xF(x)^2 - F(x) + 1 = 0$ y despejamos $F(x)$:
$$
F(x) = \dfrac{1 \pm \sqrt{1 - 4x}}{2x}
$$
Tenemos dos posibles elecciones para el signo $\pm$ pero solo una de ellas va a funcionar. Sabemos que el término constante de $F(x)$ es $1$, entonces escogamos el signo tal que eso siga siendo cierto. La elección correcta es usar el signo negativo, por lo tanto:
$$
F(x) = \dfrac{1 - \sqrt{1 - 4x}}{2x}
$$
![](https://i.imgur.com/Peg9SzC.png)
Ahora, regresando al problema original, tomemos un árbol binario cualquiera con $k$ nodos, y debemos colocarle a cada nodo un peso. Es decir, los pesos ahora son los sumandos, y por cada uno podemos ponerle los pesos del conjunto $\{c_1, c_2, \ldots, c_n\}$. Sea $A(x)=\sum_{i=1}^{n} x^{c_i}$. Por ejemplo, en el caso de ejemplo $A(x)=x+x^2$.
Sabemos que tenemos $C_k$ árboles binarios distintos, y necesitamos asignarle pesos a cada uno. La función generadora que nos dirá eso es $C_k A(x)^k$, y finalmente necesitamos sumar eso para todos los posibles tamaños de árbol. Sea $G(x)$ dicha función generadora, tenemos que:
$$
\begin{align}
G(x) &= \sum_{k=0}^{\infty} C_k [A(x)]^k \\
&= F(A(x)) \\
&= \dfrac{1 - \sqrt{1 - 4A(x)}}{2A(x)}
\end{align}
$$
Y la respuesta para cada $s$ la encontramos en el coeficiente de $x^s$ de $G(x)$. Sin embargo, el inverso multiplicativo de $A(x)$ no existe, por lo que hay que simplifcar la expresión racionalizando el numerador:
$$
\begin{align}
G(x) &= \dfrac{1 - \sqrt{1 - 4A(x)}}{2A(x)} \cdot \dfrac{1 + \sqrt{1 - 4A(x)}}{1 + \sqrt{1 - 4A(x)}} \\
&= \dfrac{1-(1-4A(x))}{2A(x)\left(1 + \sqrt{1 - 4A(x)}\right)} \\
&= \dfrac{4A(x)}{2A(x)\left(1 + \sqrt{1 - 4A(x)}\right)} \\
&= \dfrac{2}{1 + \sqrt{1 - 4A(x)}}
\end{align}
$$
La complejidad al final queda como $O(m \log m)$, pues necesitamos truncar todos los polinomios para obtener las $m$ respuestas que necesitamos.
:::
:::spoiler **Extra**
Podemos obtener la fórmula no recursiva para $C_k$ ($k$--ésimo número de Catalán) a partir de su función generadora:
$$
\begin{align}
F(x) &= \dfrac{1}{2x} \left(1 - \sqrt{1-4x} \right) \\
&= \dfrac{1}{2x} \left[ 1 - \left( 1 + \dfrac{\frac{1}{2}}{1!}(-4x) + \dfrac{\frac{1}{2}(\frac{1}{2}-1)}{2!}(-4x)^2 + \dfrac{\frac{1}{2}(\frac{1}{2}-1)(\frac{1}{2}-2)}{3!}(-4x)^3 + \dfrac{\frac{1}{2}(\frac{1}{2}-1)(\frac{1}{2}-2)(\frac{1}{2}-3)}{4!}(4x)^4 + \cdots \right) \right] \\
&= \dfrac{1}{2x} \left[ \dfrac{\frac{1}{2}}{1!}(4x) - \dfrac{\frac{1}{2}(\frac{1}{2}-1)}{2!}(4x)^2 + \dfrac{\frac{1}{2}(\frac{1}{2}-1)(\frac{1}{2}-2)}{3!}(4x)^3 + \dfrac{\frac{1}{2}(\frac{1}{2}-1)(\frac{1}{2}-2)(\frac{1}{2}-3)}{4!}(4x)^4 + \cdots \right] \\
&= \dfrac{1}{2x} \left[ \dfrac{4^1}{2^1 \times 1!}x + \dfrac{1 \times 4^2}{2^2 \times 2!}x^2 + \dfrac{1 \times 3 \times 4^3}{2^3 \times 3!}x^3 + \dfrac{1 \times 3 \times 5 \times 4^4}{2^4 \times 4!}x^4 + \cdots \right] \\
&= \dfrac{1}{2x} \left[ \dfrac{2^1}{1!}x + \dfrac{1 \times 2^2}{2!}x^2 + \dfrac{1 \times 3 \times 2^3}{3!}x^3 + \dfrac{1 \times 3 \times 5 \times 2^4}{4!}x^4 + \cdots \right] \\
&= \dfrac{2^0}{1!} + \dfrac{1 \times 2^1}{2!}x + \dfrac{1 \times 3 \times 2^2}{3!}x^2 + \dfrac{1 \times 3 \times 5 \times 2^3}{4!}x^3 + \cdots \\
&= \dfrac{2^0}{1!} + \dfrac{1 \times 2 \times 2^1}{2 \times 2!}x + \dfrac{1 \times 2 \times 3 \times 4 \times 2^2}{2 \times 4 \times 3!}x^2 + \dfrac{1 \times 2 \times 3 \times 4 \times 5 \times 6 \times 2^3}{2 \times 4 \times 6 \times 4!}x^3 + \cdots \\
&= \dfrac{2^0}{1!} + \dfrac{1 \times 2 \times 2^1}{1 \times 2^1 \times 2!}x + \dfrac{1 \times 2 \times 3 \times 4 \times 2^2}{1 \times 2 \times 2^2 \times 3!}x^2 + \dfrac{1 \times 2 \times 3 \times 4 \times 5 \times 6 \times 2^3}{1 \times 2 \times 3 \times 2^3 \times 4!}x^3 + \cdots \\
&= \dfrac{0!}{0! \times 1!} + \dfrac{2!}{1! \times 2!}x + \dfrac{4!}{2! \times 3!}x^2 + \dfrac{6!}{3! \times 4!}x^3 + \cdots \\
&= \sum_{k=0}^{\infty} \dfrac{(2k)!}{k!(k+1)!} x^k
\end{align}
$$
Por lo tanto, $\displaystyle C_k = \dfrac{(2k)!}{k!(k+1)!} = \dfrac{1}{k+1} \binom{2k}{k}$.
:::
### Número de grafos conexos etiquetados
:::spoiler **Descripción**
Determinar cuántos grafos simples no dirigidos con $n$ nodos etiquetados existen tal que sean conexos. $n \leq 10^5$
:::
:::spoiler **Ejemplo**
Para $n=3$ tenemos 4 grafos posibles:
![](https://i.imgur.com/n6enJst.png)
:::
:::spoiler **Solución**
Sea $d_n$ el número de grafos en $n$ nodos, no necesariamente conexos. Tenemos $\binom{n}{2}$ aristas posibles, y por cada una podemos decidir si la tomamos o no en el grafo, es decir, $d_n = 2^{n(n-1)/2}$.
Sea $c_n$ el número de grafos en $n$ nodos conexos. Intentemos contar el número total de grafos en términos de los grafos conexos: fijemos un vértice $v$ cualquiera del grafo, si la componente conexa que contiene a $v$ tiene $k$ vértices, entonces hay $\binom{n-1}{k-1}$ maneras de escoger los otros $k-1$ vértices de esa componente. Ya teniendo esto, hay $c_k$ formas de poner las aristas en esta componente conexa, y $d_{n-k}$ formas de poner las aristas en el resto del grafo. Si consideramos todos los tamaños para la componente conexa desde $k=1$ hasta $k=n$, tenemos que:
$$
\begin{align}
d_n &= \sum_{k=1}^{n} \binom{n-1}{k-1} c_k d_{n-k}
\end{align}
$$
Para hallar $c_n$ en términos de $d$ y posiblemente en términos de $c$'s anteriores, sacamos el último término de la suma y lo despejamos:
$$
\begin{align}
d_n &= \sum_{k=1}^{n-1} \binom{n-1}{k-1} c_k d_{n-k} + \binom{n-1}{n-1} c_n d_0 \\
c_n &= d_n - \sum_{k=1}^{n-1} \binom{n-1}{k-1} c_k d_{n-k}
\end{align}
$$
Donde el caso base es $c_0=c_1=1$. La complejidad para hallar $c_n$ es $O(n^2)$, veamos cómo mejorarla.
Sea $C(z)$ la egf de la sucesión $c_i$, y sea $D(z)$ la egf de la sucesión $d_i$. Es decir:
$$
\begin{align}
C(z) &= \sum_{n=0}^{\infty} \dfrac{c_n}{n!} z^n \\
D(z) &= \sum_{n=0}^{\infty} \dfrac{d_n}{n!} z^n
\end{align}
$$
De la primer fórmula, tenemos que:
$$
\begin{align}
d_n &= \sum_{k=1}^{n} \dfrac{(n-1)!}{(k-1)!(n-k)!} c_k d_{n-k} \\
\dfrac{d_n}{(n-1)!} &= \sum_{k=1}^{n} \dfrac{c_k}{(k-1)!} \cdot \dfrac{d_{n-k}}{(n-k)!} \\
\dfrac{n d_n}{n!} &= \sum_{k=1}^{n} \dfrac{k c_k}{k!} \cdot \dfrac{d_{n-k}}{(n-k)!} \\
\end{align}
$$
Hallemos la egf a ambos lados y dividamos entre $z$:
$$
\begin{align}
\sum_{n=1}^{\infty} \dfrac{n d_n}{n!} z^n &= \sum_{n=1}^{\infty} \left( \sum_{k=1}^{n} \dfrac{k c_k}{k!} \cdot \dfrac{d_{n-k}}{(n-k)!} \right) z^n \\
\sum_{n=1}^{\infty} \dfrac{n d_n}{n!} z^{n-1} &= \sum_{n=1}^{\infty} \left( \sum_{k=1}^{n} \dfrac{k c_k}{k!} \cdot \dfrac{d_{n-k}}{(n-k)!} \right) z^{n-1} \\
\end{align}
$$
Veamos a qué es igual la derivada de $C(z)$ y de $D(z)$:
$$
\begin{align}
C'(z) &= \sum_{n=1}^{\infty} \dfrac{n c_n}{n!} z^{n-1} \\
D'(z) &= \sum_{n=1}^{\infty} \dfrac{n d_n}{n!} z^{n-1}
\end{align}
$$
El lado izquierdo de la última ecuación es justamente $D'(z)$, y el derecho es una convolución de la sucesión $\dfrac{n c_n}{n!}$ y $\dfrac{d_n}{n!}$, es decir, $C'(z)D(z)$. Por lo tanto, $D'(z) = C'(z)D(z)$. Esta es una ecuación diferencial que se puede resolver por separación de variables:
$$
\begin{align}
C'(z) &= \dfrac{D'(z)}{D(z)} \\
\int C'(z) dz &= \int \dfrac{D'(z)}{D(z)} dz \\
C(z) &= \ln(D(z)) + c_0 \\
C(z) &= \ln(D(z)) + 1
\end{align}
$$
Finalmente, podemos hallar $D(z)$ con la fórmula en $O(n)$, y $C(z)$ en $O(n \log n)$.
:::
### Número de torneos fuertemente conexos
### [PolandBall and Many Other Balls](https://codeforces.com/contest/755/problem/G)
:::spoiler **Descripción**
Tenemos $n$ elementos ordenados del $1$ al $n$ y queremos formar $m$ grupos, donde cada uno consiste de uno o dos elementos adyacentes. Cada elemento puede pertenecer a lo más a un grupo. Sea $f(n,m)$ el número de formas de hacerlo, calcular $f(n,m)$ para toda $1 \leq m \leq k$.
Límites: $1 \leq n \leq 10^9$, $1 \leq k < 2^{15}$.
:::
:::spoiler **Ejemplo**
Para $n=3$ tenemos que:
- Si $m=1$ podemos dividir los elementos de las siguientes 5 maneras: $[1], [2], [3], [1,2], [1,2,3]$
- Si $m=2$ podemos dividir los elementos de las siguientes 5 maneras: $[1,2][3], [1][2,3], [1][2], [1][3], [2][3]$
- Si $m=3$ podemos dividir los elementos de la siguiente manera únicamente: $[1][2][3]$
Por lo tanto, $f(3,1)=5$, $f(3,2)=5$, $f(3,3)=1$.
:::
:::spoiler **Solución**
$f(n,m)$ se puede hallar con programación dinámica, ya que tenemos tres opciones:
- Tomemos el $n$-ésimo elemento y no hagamos nada con él. Hay $f(n-1,m)$ formas de hacerlo.
- Tomemos el $n$-ésimo elemento y lo metemos dentro de su propio grupo. Hay $f(n-1,m-1)$ formas de hacerlo.
- Tomemos el $n$-ésimo elemento y el $(n-1)$-ésimo elemento y los metemos en un grupo. Hay $f(n-2,m-1)$ formas de hacerlo.
Por lo tanto, $f(n,m) = f(n-1,m) + f(n-1,m-1) + f(n-2,m-1)$. Los casos base son:
$$
f(0,m) = \begin{cases}
1 &\mbox{si $m=0$} \\
0 &\mbox{si $m \geq 1$}
\end{cases} \\
f(1,m) = \begin{cases}
1 &\mbox{si $m \leq 1$} \\
0 &\mbox{si $m \geq 2$}
\end{cases}
$$
Si calculamos $f(n,m)$ de forma bruta, tendríamos una complejidad de $O(nk)$, lo cual no entra en tiempo.
Visualicemos $f(n,m)$ como una tabla, donde $n$ indica la fila y $m$ la columna:
$$
\begin{array}{|c|c|c|c|c|}
\hline
n / m & 0 & 1 & 2 & \ldots \\
\hline
0 & f(0,0) & f(0,1) & f(0,2) & \ldots \\
\hline
1 & f(1,0) & f(1,1) & f(1,2) & \ldots \\
\hline
2 &f(2,0) & f(2,1) & f(2,2) & \ldots \\
\hline
\end{array}
$$
Además, cada fila vamos a verla como un polinomio en $x$, es decir, por cada fila vamos a hallar su función generadora y la vamos a llamar $F_n(x)$:
$$
\begin{array}{|c|c|}
\hline
n & F_n(x) \\
\hline
0 & f(0,0) + f(0,1)x + f(0,2)x^2 + \ldots \\
\hline
1 & f(1,0) + f(1,1)x + f(1,2)x^2 + \ldots \\
\hline
2 & f(2,0) + f(2,1)x + f(2,2)x^2 + \ldots \\
\hline
\cdots & \cdots \\
\hline
\end{array}
$$
Por ejemplo, los casos base son ahora $F_0(x) = 1$ y $F_1(x)=1+x$. Ahora vamos a transformar la definición de $f(n,m)$ para hallar una recurrencia que involucre a $F_n(x)$ para $n \geq 2$:
$$
\begin{align}
F_n(x) &= \sum_{m=0}^{\infty} f(n,m) x^m \\
&= \sum_{m=0}^{\infty} [f(n-1,m) + f(n-1,m-1) + f(n-2,m-1)]x^m \\
&= \sum_{m=0}^{\infty} f(n-1, m)x^m + \sum_{m=0}^{\infty} f(n-1, m-1)x^m + \sum_{m=0}^{\infty} f(n-2, m-1)x^m \\
&= F_{n-1}(x) + \sum_{m=1}^{\infty} f(n-1, m-1)x^m + \sum_{m=1}^{\infty} f(n-2, m-1)x^m \\
&= F_{n-1}(x) + \sum_{m=0}^{\infty} f(n-1, m) x^{m+1} + \sum_{m=0}^{\infty} f(n-2, m)x^{m+1} \\
&= F_{n-1}(x) + x\sum_{m=0}^{\infty} f(n-1, m) x^m + x\sum_{m=0}^{\infty} f(n-2, m)x^m \\
&= F_{n-1}(x) + x F_{n-1}(x) + x F_{n-2}(x) \\
F_n(x) &= (1+x)F_{n-1}(x) + xF_{n-2}(x)
\end{align}
$$
Si hallamos de forma sucesiva las $F_n(x)$ usando la recurrencia anterior, tendríamos la misma complejidad de $O(nk)$.
Una forma de calcularla más rápido es usando exponenciación de matrices. Sea $A = \begin{pmatrix} 1+x & x \\ 1 & 0 \end{pmatrix}$ y sea $v_n = \begin{pmatrix} F_n(x) \\ F_{n-1}(x) \end{pmatrix}$, entonces tenemos que:
$$
Av_{n-1} = \begin{pmatrix} 1+x & x \\ 1 & 0 \end{pmatrix} \begin{pmatrix} F_{n-1}(x) \\ F_{n-2}(x) \end{pmatrix} = \begin{pmatrix} (1+x)F_{n-1}(x) + xF_{n-2}(x) \\ F_{n-1}(x) \end{pmatrix} = \begin{pmatrix} F_n(x) \\ F_{n-1}(x) \end{pmatrix} = v_n
$$
Por lo tanto, $v_2 = Av_1$, $v_3 = Av_2=A^2v_1$, $v_4=Av_3=A^3v_1$, y de forma general, $v_n=A^{n-1}v_1$. Podemos usar exponenciación de matrices para hallar $A^{n-1}$, pero recordemos que las entradas de $A$ son polinomios, por lo tanto hay que usar NTT para multiplicar sus entradas, logrando una complejidad de $O(k \log k \log n)$.
Vamos a intentar hallar $A^{n-1}$ con una complejidad que no dependa de $n$. Vamos a diagonalizar $A$ hallando su polinomio característico y sus raíces, que es $\det(A - zI) = \det \begin{pmatrix} 1+x - z & x \\ 1 & -z \end{pmatrix} = (1+x-z)(-z) - (x)(1) = z^2 - (1+x)z - x$, cuyas raíces son $z_{1,2} = \dfrac{1+x \pm \sqrt{(1+x)^2 + 4x}}{2}$.
Por lo tanto, si $A=PDP^{-1}$, entonces $D=\begin{pmatrix} z_1 & 0 \\ 0 & z_2 \end{pmatrix}$. Para hallar la matriz $P$ necesitamos hallar los vectores propios de $A$, es decir, por cada raíz del polinomio característico, vamos a hallar el espacio nulo de $A-zI$.
$$
\begin{align}
A-zI &= \begin{pmatrix} 1+x - z & x \\ 1 & -z \end{pmatrix} \\
&\to \begin{pmatrix} 1 & -z \\ 1+x - z & x \end{pmatrix} \\
&\to \begin{pmatrix} 1 & -z \\ 0 & x - (1+x-z)(-z) \end{pmatrix} \\
&= \begin{pmatrix} 1 & -z \\ 0 & x - z^2+(1+x)z \end{pmatrix} \\
&= \begin{pmatrix} 1 & -z \\ 0 & 0 \end{pmatrix}
\end{align}
$$
Para hallar los vectores propios $w_1 = \begin{pmatrix} x_1 \\ y_1 \end{pmatrix}$ y $w_2 = \begin{pmatrix} x_2 \\ y_2 \end{pmatrix}$ correspondientes a $z_1$ y $z_2$, hacemos que $Aw_1 = z_1w_1$, lo que es equivalente a $(A-z_1I)w_1=0$, y de forma similar, $(A-z_2I)w_2=0$. Tenemos que:
$$
\begin{align}
(A-z_1I)w_1 &= 0 \\
\begin{pmatrix} 1 & -z_1 \\ 0 & 0 \end{pmatrix} \begin{pmatrix} x_1 \\ y_1 \end{pmatrix} &= 0 \\
x_1 - z_1y_1 &= 0 \\
x_1 = z_1y_1
\end{align}
$$
De forma similar, $x_2 = z_2y_2$. Por lo tanto, $w_1 = \begin{pmatrix} z_1 \\ 1 \end{pmatrix}$ y $w_2 = \begin{pmatrix} z_2 \\ 1 \end{pmatrix}$. Entonces, $P = \begin{pmatrix} z_1 & z_2 \\ 1 & 1 \end{pmatrix}$. Tenemos que $P^{-1} = \dfrac{1}{z_1-z_2}\begin{pmatrix} 1 & -z_2 \\ -1 & z_1 \end{pmatrix}$.
Sabemos que $A=PDP^{-1}$, entonces $A^2=PDP^{-1}PDP^{-1}=PD^2P^{-1}$, de forma general, $A^{n-1} = PD^{n-1}P^{-1}$. Para hallar $D^{n-1}$ solo tenemos que elevar sus entradas en la diagonal a la $n-1$, o sea: $D^{n-1} = \begin{pmatrix} {z_1}^{n-1} & 0 \\ 0 & {z_2}^{n-1} \end{pmatrix}$. Pero recordemos que $z_{1,2} = \dfrac{1+x \pm \sqrt{1+6x+x^2}}{2}$, las cuales se pueden calcular usando la raíz cuadrada en serie de potencias. Para elevarlos a la $n-1$, usamos la exponencial.
Por lo tanto, la complejidad ahora queda $O(k \log k)$.
:::
### [Chef and Equations](https://www.codechef.com/problems/CHEFEQUA)
### [Series Sum](https://www.codechef.com/problems/SERSUM)
:::spoiler **Descripción**
Dados $n$ enteros $a_1, a_2, \ldots, a_n$, definimos a las funciones $f(x,k)$ y $g(t,k)$ como:
$$
\begin{align}
f(x,k) &= (x+a_1)^k + (x+a_2)^k + \cdots + (x+a_n)^k \\
g(t,k) &= f(0,k) + f(1,k) + \cdots + f(t,k)
\end{align}
$$
Dados $T$ y $K$ enteros, hallar $g(T,i)$ para $i=0,1,2,\ldots,K$ módulo $10^9+7$.
Límites:
- $1 \leq n \leq 10^5$
- $0 \leq a_i < 10^9+7$
- $1 \leq K \leq 5 \times 10^4$
- $1 \leq T \leq 10^{18}$
:::
:::spoiler **Ejemplo**
Sea $a=[1, 2]$, $K=3$ y $T=4$.
Tenemos que $f(x,k) = (x+1)^k + (x+2)^k$ y que:
$$
\begin{align}
g(4,i) &= f(0,i) + f(1,i) + f(2,i) + f(3,i) + f(4,i) \\
&= (1^i + 2^i) + (2^i + 3^i) + (3^i + 4^i) + (4^i + 5^i) + (5^i + 6^i) \\
&= 1 + 2 \times (2^i + 3^i + 4^i + 5^i) + 6^i
\end{align}
$$
Y la respuesta es:
$$
\begin{align}
g(4,0) &= 1 + 2 \times (1 + 1 + 1 + 1) + 1 = 10 \\
g(4,1) &= 1 + 2 \times (2 + 3 + 4 + 5) + 6 = 35 \\
g(4,2) &= 1 + 2 \times (4 + 9 + 16 + 25) + 36 = 145 \\
g(4,3) &= 1 + 2 \times (8 + 27 + 64 + 125) + 216 = 665
\end{align}
$$
:::
:::spoiler **Solución**
Tratemos de hallar una función generadora para la sucesión de valores $g(T,k)$, es decir, $\displaystyle G(z)=\sum_{k=0}^\infty g(T,k) z^k$. Tenemos que:
$$
\begin{align}
G(z) &= \sum_{k=0}^{\infty} \sum_{x=0}^{T} f(x, k) z^k \\
&= \sum_{k=0}^{\infty} \sum_{x=0}^{T} \sum_{i=1}^{n} (x+a_i)^k z^k \\
&= \sum_{x=0}^{T} \sum_{i=1}^{n} \sum_{k=0}^{\infty} (z(x+a_i))^k \\
&= \sum_{x=0}^{T} \sum_{i=1}^{n} \dfrac{1}{1-z(x+a_i)}
\end{align}
$$
Como ya no se puede simplificar más, intentemos ahora hallar $G(z)=\displaystyle \sum_{k=0}^\infty \dfrac{g(T,k)}{k!} z^k$, a la que le llamaremos la función generadora exponencial de la sucesión de valores. Tenemos que:
$$
\begin{align}
G(z) &= \sum_{k=0}^{\infty} \dfrac{1}{k!} \sum_{x=0}^{T} f(x, k) z^k \\
&= \sum_{k=0}^{\infty} \dfrac{1}{k!} \sum_{x=0}^{T} \sum_{i=1}^{n} (x+a_i)^k z^k \\
&= \sum_{x=0}^{T} \sum_{i=1}^{n} \sum_{k=0}^{\infty} \dfrac{(z(x+a_i))^k}{k!} \\
&= \sum_{x=0}^{T} \sum_{i=1}^{n} e^{z(x+a_i)} \\
&= \left( \sum_{x=0}^{T} e^{zx} \right) \left( \sum_{i=1}^{n} e^{za_i} \right) \\
&= \dfrac{1-(e^z)^{T+1}}{1-e^z} \sum_{i=1}^{n} \sum_{j=0}^{\infty} \dfrac{(z a_i)^j}{j!} \\
&= \dfrac{1-(e^z)^{T+1}}{1-e^z} \sum_{j=0}^{\infty} \left( \sum_{i=1}^{n} a_i^j \right) \dfrac{z^j}{j!} \\
\end{align}
$$
Sea $\displaystyle h_j = \sum_{i=1}^{n} a_i^j$, entonces $\displaystyle G(z) = \dfrac{1-(e^z)^{T+1}}{1-e^z} \sum_{j=0}^{\infty} h_j \dfrac{z^j}{j!}$. Intentemos hallar la función generadora ordinaria de la sucesión $h_j$, es decir, $\displaystyle H(z)=\sum_{j=0}^{\infty} h_j z^j$. Tenemos que:
$$
\begin{align}
H(z) &= \sum_{j=0}^{\infty} \sum_{i=1}^{n} a_i^j z^j \\
&= \sum_{i=1}^{n} \sum_{j=0}^\infty (a_i z)^j \\
&= \sum_{i=1}^{n} \dfrac{1}{1 - a_i z}
\end{align}
$$
Para hallar la suma anterior, podemos usar divide y vencerás para hallarla en una complejidad de $O(n \log^2 n)$. Podríamos tener un método $calc(l,r)$ que nos devuelva un par de polinomios, el numerador y el denominador de la suma de $l$ a $r$. El caso base es cuando $l=r$, ahí solo devolvemos $\{1, 1-a_lz\}$. Sea $m=\lfloor (l+r)/2 \rfloor$, para combinar las respuestas de $calc(l,m) = \{A, B\}$ y de $calc(m+1,r) = \{C, D\}$ en $calc(l,r)$, tenemos que $\dfrac{A}{B} + \dfrac{C}{D} = \dfrac{AD + BC}{BD}$, entonces devolvemos $\{AD+BC, BD\}$. La complejidad es $T(n) = 2T(n/2) + O(n \log n)$, es decir, $T(n) = O(n \log^2 n)$. Al final tendremos que $calc(1,n) = \{num, den\}$, y ahora sí hallamos $\dfrac{num}{den}$ con el inverso y una convolución.
Por lo tanto, ya que tenemos calculados los $K+1$ valores $h_j$, los sustituímos en $G(z)$:
$$
\begin{align}
G(z) &= \left( \dfrac{1-e^{z(T+1)}}{1-e^z} \right) \left( \sum_{j=0}^{\infty} h_j \dfrac{z^j}{j!} \right)
\end{align}
$$
Hallar dicho producto es fácil, pues solo requerimos de 2 convoluciones y 1 inverso. Al final no olvidemos multiplicar por $k!$ cada coeficiente de $G(z)$ para obtener la respuesta final.
:::
### [Chef and the Combination Lock](https://www.codechef.com/problems/CHEFSSM)
### [Power Sum](https://www.codechef.com/problems/PSUM)
### [Just Primes II](https://www.spoj.com/problems/JPM2/)
### [Chef and Rainbow Road](https://www.codechef.com/problems/RNBWROAD)
### [Chef and Same Old Recurrence 2](https://www.codechef.com/problems/JADUGAR2)
### [Perfect Permutations](https://www.hackerearth.com/problem/algorithm/perfect-permutations-september-clash/)