Schneller Weg, um n zu berechnen! mod m wobei m prim ist?

War ich neugierig, ob es war eine gute Möglichkeit, dies zu tun. Mein Aktueller code ist so etwas wie:

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

Aber es scheint ziemlich langsam zu sein!

Ich kann auch nicht berechnen n! und dann gelten die prime modulus da manchmal n ist so groß, dass n! ist nur nicht möglich, explizit zu berechnen.

Stieß ich auch auf http://en.wikipedia.org/wiki/Stirling%27s_approximation und Frage mich, ob diese überhaupt verwendet werden kann hier in gewisser Weise?

Oder, wie kann ich erstellen Sie eine rekursive, memoized-Funktion in C++?

Kommentar zu dem Problem
Wie groß ist n? Kommentarautor: Matti Virkkunen
Beliebig große Kommentarautor: John Smith
Wie langsam ist langsam? Von Ihrem pseudocode, ich schlussfolgern, du bist computing dieses in Python, ist das richtig? Kommentarautor: Fred Foo
Es ist eine sehr schnelle Möglichkeit, dies zu tun mit Invarianten Multiplikation oder vielleicht Montgomery-Reduktion. Beide Methoden beseitigen, der E-Modul und ermöglicht eine loop-unrolling Techniken. Kommentarautor: Mysticial
Sie können brechen-Modul in die wichtigsten Faktoren, um die Fälle zu identifizieren, die null leichter, obwohl das hilft nicht für die große prime - Faktoren, wie hilfreich dieser ist, hängt davon ab, was Sie wissen über den E-Modul, wenn überhaupt, und wenn prime factorisation kitzelt Ihre Phantasie. Kommentarautor: davin

InformationsquelleAutor der Frage John Smith | 2012-03-15

Schreibe einen Kommentar