Быстрый способ вычисления n! по модулю m, где m простое число?

Мне было любопытно, существует ли хороший способ сделать это. Мой текущий код выглядит примерно так:

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

Но он кажется довольно медленным!

Я тоже не могу вычислить n! а затем применить простой модуль, потому что иногда n настолько велико, что n! просто невозможно вычислить в явном виде.

Я также наткнулся на http://en.wikipedia.org/wiki/Stirling%27s_apprimationи задался вопросом, можно ли это вообще как-то использовать здесь?

Или как мне создать рекурсивную запоминаемую функцию на C++?

43
задан Tobias Kienzler 27 September 2016 в 06:11
поделиться