Aquí está la técnica:
BigInteger ncr (BigInteger n, BigInteger r)
{
Numerador BigInteger = 1, denominador = 1;
BigInteger j = 1;
para (int i = n-r + 1; i <= n; i ++, j ++)
{
numerador * = i;
denominador * = j;
}
numerador de retorno Divide (denominador);
}
(No soy un codificador de JAVA, pero he hecho todo lo posible para convertir mi código de Python en JAVA. Solo mire el algoritmo en lugar del estilo de código / codificación).
Aquí está el código de Python para referencia:
- ¿Hay alguna manera de resolver los problemas del problema SEQ sin el uso de la exponenciación de matrices?
- Cómo entender las anotaciones asintóticas
- ¿Cuál será el valor máximo de [math] \ theta [/ math] hasta que la aproximación [math] \ sin {\ theta} [/ math] sea aproximadamente igual a [math] \ theta [/ math] que se mantenga dentro del 10% ¿error?
- ¿Por qué la suma de enteros hasta cualquier potencia de 2 tiene una representación binaria tan simple?
- ¿Por qué un número con cualquier número de dígitos, cuando se resta de su forma invertida, produce un número divisible por 9?
def ncr (n, r):
nume, deno, j = 1,1,1
para i en xrange (n-r + 1, n + 1):
nume = Karatsubamul (nume, i)
deno = Karatsubamul (deno, j)
j + = 1
retorno (nume / deno)
Y aquí vamos por la prueba:
C (n, r) = n! / (R! (Nr)!)
= 1.2.3… n / ((1.2.3… r) (1.2.3… (nr))
= (n-r + 1) (n-r + 2) … n / (1.2.3 … r) (Eliminar todo (nr)! del numerador y denominador)