Complexité de la prise de mod

23

Cela semble être une question qui devrait avoir une réponse facile, mais je n'en ai pas de définitive:

na,pamodp

Diviser simplement a par p prendrait le temps O(M(n))M(n) est la complexité de la multiplication. Mais mod peut- il être exécuté un peu plus rapidement?

Suresh
la source
1
Peut-être une question stupide, mais pouvez-vous convertir a à écrire en base p et ensuite regarder le LSB?
Pål GD
2
Vous pourriez, mais cela semble être un travail supplémentaire et nécessiterait probablement une division.
Suresh

Réponses:

12

Shoup (Section 3.3.5, Théorème 3.3, p. 62) donne une borne pour calculer le résidu r dans le temps O(nlogq)a=qp+r et loga=n .

Je suppose que si p et a sont tous deux à peu près n nombres de bits, alors q (et donc logq ) devrait être plutôt petit, donnant O(n) .

Si a est un nombre à n bits et p est relativement petit, alors l'approche de multiplication devrait être plus rapide.

Luke Mathieson
la source