Złożoność przyjmowania mod

23

To wydaje się pytaniem, które powinno mieć łatwą odpowiedź, ale nie mam ostatecznego:

na,pamodp

Jedynie podzielenie przez będzie wymagać czasu , gdzie jest złożoność mnożenia. Ale czy można wykonać nieco szybciej?ap O(M(n))M(n)mod

Suresh
źródło
1
Może głupie pytanie, ale można przekonwertować być napisane w podstawowej a następnie spojrzeć na LSB? ap
Pål GD
2
Mógłbyś, ale to wydaje się dodatkową pracą i prawdopodobnie wymagałoby podziału.
Suresh

Odpowiedzi:

12

Shoup (Rozdział 3.3.5, Twierdzenie 3.3, s. 62) wyznacza granicę dla obliczenia reszty czasie gdzie oraz .rO(nlogq)a=qp+rloga=n

Sądzę, że jeśli zarówno i są mniej więcej liczbami bitowymi, to (a zatem ) powinno być raczej małe, dając .panqlogqO(n)

Jeśli jest liczbą bitową, a jest względnie małe, wówczas mnożenie powinno być szybsze.anp

Luke Mathieson
źródło