Coeficientes binomiales

Anuncio
Coeficientes binomiales
El coeficiente binomial o número combinatorio nk es el número de modos en los que se puede
escoger k objectos de un total de n. Su fórmula es bien conocida,
n
n!
=
k
k!(n − k)!
donde n! = n ·(n − 1)·(n − 2) · · · 3·2·1, pero no es demasiado práctica desde un punto de vista
computacional, puesto que se tiene que trabajar con números muy grandes (los factoriales)
para acabar obteniendo un resultado mucho más pequeño. Por ejemplo,
2432902008176640000
20
20!
=
= 184756,
=
10!10!
1316819440000
10
donde se puede ver que, pese a que el número final sólo tiene 6 cifras, nos ha hecho falta
calcular 20!, que tiene 19. Esto es un problema, puesto que el tipo int de 32 bits que suele
usarse en la mayorı́a de lenguajes de programación no puede almacenar números de más de
10 cifras.
Este, sin embargo, no es el único modo de calcular el número nk , puesto que los números
combinatorios satisfacen la siguiente propiedad:
n
=1
si k és 0 o n,
k
n
n−1
n−1
=
+
si 0 < k < n.
k
k−1
k
Esta fórmula recursiva permite calcular los números combinatorios sin multiplicar ni dividir, mediante un procedimiento visual conocido hoy en dı́a como “Triángulo de Pascal” o
“Triángulo de Tartaglia”, pero del cual hay referencias históricas con más de 1000 años de
antigüedad:
0
1
0
1
1
1
1
0
1
2
2
2
1
2
1
0
1
2
3
3
3
3
1
3
3
1
0
1
2
3
4
4
4
4
4
1
4
6
1
1
4
3
2
1
0
...
...
Para calcular los siguientes números combinatorios sólo hay que ir llenando
las filas del
n
triángulo. Usa esta idea para calcular el valor de los números combinatorios k donde n ≤ 30
y 0 ≤ k ≤ n.
Entrada
La entrada consiste en una secuencia de lı́neas, cada una de las cuales contiene 2 números
naturales n y k, donde 0 ≤ n ≤ 30 y 0 ≤ k ≤ n.
Salida
Para cada lı́nea de la entrada tu programa debe escribir una lı́nea con el valor del número
combinatorio nk correspondiente.
Ejemplo de entrada 1
Ejemplo de salida 1
0
1
1
2
2
2
1
1
1
1
2
1
0
0
1
0
1
2
Ejemplo de entrada 2
Ejemplo de salida 2
20
30
30
30
30
30
184756
155117520
30045015
30045015
1
1
10
15
10
20
0
30
Descargar