aneira rápida de calcular n! mod m onde m é primo?

Fiquei curioso para saber se havia uma boa maneira de fazer isso. Meu código atual é algo como:

def factorialMod(n, modulus):
    ans=1
    for i in range(1,n+1):
        ans = ans * i % modulus    
    return ans % modulus

Mas parece bastante lento!

Eu também não consigo calcular n! e, em seguida, aplique o módulo primo porque às vezes n é tão grande que n! simplesmente não é possível calcular explicitamente.

Eu também me deparei comhttp: //en.wikipedia.org/wiki/Stirling%27s_approximatio e me pergunto se isso pode ser usado aqui de alguma form

Or, como posso criar uma função recursiva e memorizada em C +

questionAnswers(16)

yourAnswerToTheQuestion