Cómo calcular (n!) Mod p y nCr mod m, como se requiere en varias preguntas algorítmicas

Gracias por A2A.

¡Existen múltiples formas de evaluar nCr mod mo n! mod m.
La forma más común de evaluar n! mod m es tomar un módulo después de cada paso de multiplicación mientras se evalúa n !. P.ej. ¡Para calcular 1000! mod m, se puede usar un bucle simple para evaluarlo como
(…. ((((1 mod m) * 2) mod m) * 3) mod m….) * 1000) mod m.
Obviamente n! mod m = 0 para n> = m.

Para calcular nCr mod m,
uno necesita saber cómo evaluar (a / b) mod m.
Si bym son coprimos entre sí (en general, m recibe un número primo),
(a / b) mod m = (a mod m) * (b invmod m) = (a mod m) * (b ^ (m-2) mod m). Aquí, invmod es el módulo inverso. Existen muchos foros de intercambio de pila descendente y páginas wiki desde donde puede leer sobre el módulo inverso y la derivación de los resultados anteriores.
Sin embargo, el método de elevar a la potencia (m-2) es válido solo cuando el denominador de la fracción, es decir, bym son coprimos. En caso de que no lo sean, existen otros métodos complejos que involucran la función Totient que puede googlear.
Ahora,
nCr mod m = n! / r! (nr)! mod m
= (n! mod m) * (((r! mod m * (nr)! mod m) ^ (m-2)) mod m).
Uno puede usar exponenciación modular para evaluar (a ^ b) mod m, que supongo que ya sabe. (En caso de que no lea un tutorial popular de topcoder sobre exponenciación modular.

Espero haberte dado una idea aproximada de cómo se debe hacer y qué se debe leer para evaluarlos.

Esta pregunta es de un concurso en curso. No será apropiado responderlo en este foro. 🙂
Puedes enviarme un PM en Facebook, o simplemente hacer una búsqueda en Google 🙂
Lo siento, no puedo responderlo ahora

A2A
¡Me gustaría redirigirlo a este sitio que explica la mayoría de los métodos muy claramente! gracias 🙂

factorial | VEN EN CÓDIGO EN

More Interesting

Cómo encontrar la complejidad del tiempo en: T (n) = n * (T (n-1) + O (n))

Cómo implementar un algoritmo de equilibrio de carga personalizado aparte del algoritmo Round Robin predeterminado en mi Amazon Elastic Load Balancer usando Java SDK para AWS

Cómo insertar un valor al final de una lista vinculada

¿Hay algún conocimiento de programación que pueda utilizar / ayudaría a aprender ajedrez?

¿Qué métricas deberían usarse para crear una puntuación de confiabilidad automática para los artículos de Wikipedia?

¿Cuáles son los mejores recursos para aprender R? Tratando de construir mi propio algoritmo de predicción basado en datos anteriores que tengo en archivos csv y que solía ser un desarrollador de Ruby hace un par de años

¿Cuáles son algunas optimizaciones comunes que los clientes de GPS como Google Maps usan además de los algoritmos elementales de ruta más corta como la búsqueda A *?

¿Cuándo sería el algoritmo A más lento que el algoritmo B? Demuestre su respuesta con la ayuda de un ejemplo.

¿Es posible usar los poderes de una matriz de adyacencia para calcular las rutas más cortas que BFS calcularía?

Cómo calcular (n!) Mod p y nCr mod m, como se requiere en varias preguntas algorítmicas

Cómo usar el caso del interruptor en Java

¿Cuáles son los conceptos de software que todo programador debe saber?

¿Cómo creo más interés en la programación y soy un buen programador en algoritmos?

¿Cuáles son las estructuras de datos y los algoritmos utilizados en la programación competitiva?

¿Cómo se determina la mejor, la media y la peor información dada sobre lo que devuelve un método después del bucle?