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.