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.
0 votos
@Cardioid_Ass_22 Sí, has acertado :-)
0 votos
¿Es este un Proyecto Euler ¿pregunta?
0 votos
@BrianTung No.....pero tal vez similar a algunas de sus preguntas..
2 votos
No creo que sea buena idea hinchar el MSE con retos de programación de toda la web.
0 votos
Todas las operaciones involucradas son operaciones binarias: + , ⋅ e incluso el factorial es sólo una multiplicación. Así que si sigues reduciendo todas las operaciones módulo p en su camino, el peor caso será multiplicar dos números cercanos a 109 que debería seguir estando en el rango de representación de enteros de C++.
0 votos
Esto es más adecuado para ser una pregunta sobre stackoverflow.com si incluso se enfrenta a un problema para codificar o tiene un mvce.
0 votos
(Hacia la respuesta: construir tablas de n↦(n!mod y n\mapsto(n!^{-1}\bmod p) para n\leqslant N:=3\cdot 10^5 . El primero se construye con 0!=1 y las multiplicaciones sucesivas \bmod p el segundo se construye hacia abajo, utilizando N!^{-1}\bmod p calculado a partir de N!\bmod p como quieras, y de nuevo las multiplicaciones sucesivas \bmod p .)
0 votos
@metamorphy Creo que es problemático calcular n!-inverso mod p ..
0 votos
@metamorphy Así es como calculo n! mod p = (1%p*2%p*3%p*4%p*5%p*....n%p)......pero la pregunta es ¿cómo calculo n^-1! mod p?
0 votos
¿Qué es "problemático"? La euclidiana extendida, o incluso sólo la exponenciación modular (ya que a\not\equiv 0\implies a^{-1}\equiv a^{p-2}\pmod{p} ).
0 votos
¡Digamos, en nuestro caso, que a=n! .... Así que tengo que calcular (n!)^p-2 (mod p) .........Saber que (x^y)%n sólo se puede calcular cuando x<=10^9.....en nuestro caso, x=n!>>>>10^9
0 votos
Puede utilizar Biblioteca PARI C . Sea
p=10^9+7;x=10^5-1;y=10^5-11;z=10^5-21;
, regístrese pari/gp calculadoraMod((x+y+z)!/(x!*y!*z!),p)
El resultado esMod(912505566, 1000000007)
.