Motivado pelo seguinte problema: https://br.spoj.pl/problems/DIOFANTO/
Então, eu li esse problema e bolei uma solução toda bonitinha pra ele usando combinatória. Só tava faltando implementar e eu mal sabia que era isso que ia me causar toda a dor de cabeça.
Eu estou implementando um algoritmo e em certo ponto preciso fazer a seguinte conta:
Em que a e b são números cujo fatorial não cabe em uma variável, p é um primo e p é maior que a e b. Como proceder?
Obviamente não posso calcular o fatorial antes, fazer a divisão e depois tirar o módulo. Mesmo um algoritmo que tenta ir simplificando a fração à medida que o fatorial é calculado não funciona. E o módulo do quociente não é o quociente dos módulos (Não acredita? Teste com p = 7, a = 5 e b = 3).
O que fazer então? Bom, as seguintes propriedades vão ajudar:
a-1 (mod p) existe se mmc(a, p) = 1
Agora a gente pode usar essas coisas pra fazer o seguinte:
(a/b) mod p = ab-1 mod p = (a mod p)(b-1 mod p) mod p
Acho que já escrevi demais… vou tentar implementar isso agora.