Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

0 votos

¿Cómo calcular el módulo de un factorial?

Estoy utilizando el lenguaje de programación C++. Nos dan 3 enteros x,y,z y tengo que calcular :-

(x+y+z)!/(x!y!z!) modulo p

donde , p=109+7

También , 0<=x,y,z<=105

He intentado muchos enfoques pero ninguno ha funcionado. El teorema de Fermat tampoco funciona aquí :(

En C++, el valor máximo que puede tener un entero es 10^18.

1 votos

¿Cuáles son los valores de x,y, y z ?

1 votos

@Cardioid_Ass_22 Ya lo he comentado. Pueden ser cualquier cosa entre [0,10^5]...quiero saber una forma de calcular esto en mi compilador de C++ :-)

0 votos

¿Busca un enfoque para simplificar el cálculo en general, más que una respuesta específica? Si es así, aclare en su pregunta qué tamaño de valor puede manejar en su cálculo.

0voto

Firex Firexo Puntos 43

Esta pregunta me la hice yo y he encontrado la respuesta.

Básicamente se quiere calcular k!/a!*b!*c! mod p

que se puede reescribir como :- (k! mod p) * (1/a!) mod p * (1/b!) mod p * (1/c!) mod p

Para calcular m!%p:-

int hecho[Maxn];

hecho[0] = 1;

for(int i = 1; i < Maxn; i++)

{

fact[i] = 1LL * fact[i - 1] * i % Mod;

}

Para calcular (1/x!) mod p :-

int ifact[Maxn];

ifact[0] = 1;

for(int i = 1; i < Maxn; i++)

{

ifact[i] = 1LL * ifact[i - 1] * inverse(i, Mod) % Mod;

}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X