Cómo encontrar el módulo de grandes combinaciones como nCr mod p donde p es un número primo

He tratado de evitar que el código desborde el rango de una variable larga en la medida de lo posible.

  1. He multiplicado ‘n’ con sus números anteriores solo en la medida necesaria (hasta r + 1 o n-r + 1, lo que sea mayor).
  2. He reunido los ceros acumulados en variables separadas para tratar más adelante.

public static long nCr (long n, long r, long p)
{
largo mayor = (r> = (nr))? r: (nr);
largo menor = n-mayor;
numerador largo = denominador = 1, numCount = denCount = 0;
para (; n> mayor; n–)
{
numerador * = n;
while (numerador% 10 == 0)
{
numerador / = 10;
numCount ++;
}
}
para (; menor> 1; menor–)
{
denominador * = menor;
while (denominador% 10 == 0)
{
denominador / = 10;
denCount ++;
}
}
return (numerador / denominador * Math.pow (10, numCount-denCount))% p;
}

Usa el teorema de lucas y el módulo inverso.
puede verificar una de mis soluciones en: – Solución | CodeChef

More Interesting

¿Cuál es el progreso hasta ahora con la hipótesis de Riemann?

Cómo resolver para [matemáticas] y [/ matemáticas] en [matemáticas] \ displaystyle \ left | \ frac {y-1} {y} \ right | = | x | [/ matemáticas]

¿Cuál es una buena explicación del algoritmo de Floyd y el algoritmo de Brent para la búsqueda de ciclos?

¿Cuál es una fórmula para calcular la suma de todas las permutaciones de un número dado con repeticiones?

Sea [math] d (n) [/ math] el número de factores positivos, incluidos [math] 1 [/ math] y [math] n, [/ math] de un entero positivo [math] n [/ math] . ¿Cómo encontramos la suma de todas [matemáticas] n [/ matemáticas] de modo que [matemáticas] d (n) = \ frac {n} {3} [/ matemáticas]? Cualquier prueba elegante de por qué estos son los únicos valores de [math] n [/ math] son ​​bienvenidos pero no obligatorios.

Cómo explicar qué sucede cuando sustituye directamente los valores de la tira crítica en la función sin continuación analítica en una función zeta de Riemann

¿Cuál es el resto cuando 123, 123, … (hasta 300 dígitos) se divide por 999?

Dado el logaritmo natural [math] \ ln x [/ math] (y tal vez iniciar sesión con cualquier base) y un vector [math] A \ in \ mathcal {R} ^ n [/ math], ¿cómo sería [math] \ ln ¿Un trabajo [/ matemático]?

¿Qué sucede si alguien descubre un algoritmo de tiempo polinómico para problemas de factorización de enteros?

1 coulomb es 1 amperio por segundo y 1 ampere es 1 coulomb por segundo (eso es lo que dice Wikipedia). Estoy un poco confundida. ¿Qué significa esto?