Supongo que está preguntando esto en el contexto de la programación competitiva. Por lo general, se le pide que calcule el módulo factorial algún número (puede ser [matemática] 10 ^ 9 + 7 [/ matemática] o [matemática] 10 ^ 9 + 9 [/ matemática]). Así que precalcule el factorial y guárdelo en una matriz.
typedef largo largo Largo;
const Long MOD = 1000000007;
const int MAX = 100000;
Factorial largo [MAX + 1];
precalculación nula () {
factorial [0] = 1;
para (int i = 1; i <= MAX; ++ i)
factorial [i] = (factorial [i-1] * i)% MOD;
}
Recuerda la fórmula [matemáticas] N! = N \ veces (N-1)! [/ Matemáticas]
- ¿Cuáles son los algoritmos más rápidos para colorear los bordes en un gráfico con max_degree + 1 colores?
- Cómo encontrar la longitud máxima de la submatriz en una matriz determinada
- ¿Cuál es el libro de estructura de datos mejor y más fácil de entender para un estudiante promedio?
- ¿Qué es el diseño paramétrico y cuáles son algunos ejemplos de él?
- ¿Cuál es el enfoque algorítmico para invertir un árbol binario dado?
Eso es todo. El cálculo previo lleva tiempo [matemático] O (n) [/ matemático]. Después de eso encontrando N! no es más que el elemento (N + 1) de la matriz, que es factorial [N]. Como se trata de un acceso a matriz, lleva tiempo constante.