Ich denke, es gibt einige Verfahren zur Berechnung von pow (a, nCr)% b? Aber ich möchte wissen, wie ich dieses Problem in der Programmierung effizient lösen kann?Berechnung Pow (a, nCr)% m effizient
1
A
Antwort
0
Ich kann eine Art denken, die nur ~O(n^2*log(m))
ist und erfordert nicht die Verwendung von großen Ganzzahlen. Ich habe eine Vorstellung von einem schnelleren (etwas wie O(k*log(m)*log(n))
) Ansatz, wenn Sie Faktor m
Faktor und totient (m/gcd(a^k,m)
) für einige k
Faktor, aber es wird ziemlich haarig.
Auf jedem Fall für den O(n^2*log(m))
Ansatz, werden wir von der Tatsache, dass nCr == (n-1) C (r-1) + (n-1) Cr
Hier ist eine Berechnung machen von nCr, die ausnutzt, dass:
def nCr(n0,r0):
memoized = {}
def go(n,r):
if r == 0 or r == n:
return 1
if (n,r) not in memoized:
memoized[(n,r)] = go(n-1,r-1) + go(n-1,r)
return memoized[(n,r)]
return go(n0,r0)
der Code für Ihre powChooseMod
Funktion wäre fast identisch sein:
def powChooseMod(a,n0,r0,m):
memoized = {}
def go(n,r):
if r == 0 or r == n:
return a
if (n,r) not in memoized:
memoized[(n,r)] = go(n-1,r-1) * go(n-1,r) % m
return memoized[(n,r)]
return go(n0,r0)
Verwandte Themen
- 1. Bereich Berechnung mit Pow-Funktion
- 2. Berechnung (a^b)% MOD
- 3. Ersetzen "a ** b" pow (a, b)
- 4. Monad m => a -> [a -> m a] -> m a
- 5. nCr mod p effizient berechnen, wenn n sehr groß ist
- 6. Haskell (a -> ma) -> m (a -> a) -> m (a -> a)
- 7. Drehen A => M [B] in M [A => B]
- 8. undefined Verweis auf 'nCr'
- 9. Intercept "git commit -a (m)"
- 10. sehr große Matrix Berechnung in R effizient
- 11. simulieren binominalen Koeffizienten (nCr) in Python
- 12. Berechnung Summe der geometrischen Reihe (mod m)
- 13. Wie unterscheidet sich git commit -a von -a -m?
- 14. Warum a + = b * pow (10, c-i-1) = 99 C++?
- 15. Idiomatic Weg "m (ta) -> (a -> m (tb)) -> m (tb)" zu implementieren
- 16. So schreiben Sie map/fmap analog (a-> b) -> F m a -> F m b
- 17. Wie Matrixmultiplikation effizient
- 18. Berechnung der monatlichen Durchschnitt in Power Query (M)
- 19. Rekursives Batch - Skript zum Berechnen von pow
- 20. Berechnung Frequenz von Passwort-Hashes effizient in MySQL
- 21. Warum ineffiziente faktorielle Berechnung ist ... effizient (und schnell)?
- 22. Lösung zu unterteilen M in N, wobei M in N, so dass M = A x Y, wo keine zwei N gleichen A enthält
- 23. Ist L = {a^n b^m | n> m} eine normale oder irreguläre Sprache?
- 24. Finden der n-ten Potenz der ganzen Zahl m durch das C-Programm ohne pow()
- 25. effizient
- 26. Poisson Berechnung (Erlang C)
- 27. Pow-Methode in Taschenrechner App
- 28. Ist std :: move (a) .m ein xvalue oder ein prvalue?
- 29. Datatables sort date (d/m/J H: i A)
- 30. ^A/m in regex funktioniert nicht, wie mdn schlägt
Mögliche Duplikat [Modulus Macht der großen Zahlen] (https://stackoverflow.com/questions/ 8287 144/Modul-Macht-der-großen Zahlen) –