nPr y nCr

Escribe una función que calcule eficientemente nPr (el número de permutaciones de r elementos de un conjunto de tamaño n) y otra función que calcule eficientemente nCr (el número de combinaciones de r elementos de un conjunto de tamaño n, sin importar el orden).

  • La fórmula para calcular nPr es n!/(n-r)! ("!" es la operación factorial).
  • La fórmula para calcular nCr es n!/(r!(n-r)!).

Tus funciones deben funcionar eficientemente en casos en los que n! o r! sean muy grandes en comparación con el resultado. Calcular simplemente los factoriales y dividir hará que tu programa exceda el tiempo límite. Intenta pensar en un método más eficiente.

Ejemplos

# Permutations

nPr[7, 4] ➞ 840
nPr[300, 3] ➞ 26730600

# Combinations

nCr[7, 4] ➞ 35
nCr[300, 3] ➞ 4455100
nCr[300, 297] ➞ 4455100

Notas

  • n y r siempre serán enteros positivos donde n >= r.
  • Piensa en qué factores se cancelarán al dividir los factoriales.