Ho cercato di implementare un esponenziale di recente modulare. Sto scrivendo il codice in VHDL, ma sto cercando consigli di natura più algoritmica. Il componente principale del exponentiator modulare è un moltiplicatore modulare che devo anche implementare. Non ho avuto problemi con l'algoritmo di moltiplicazione - è solo l'aggiunta e lo spostamento e ho fatto un buon lavoro di capire cosa significano tutte le mie variabili in modo da poter moltiplicare in un tempo abbastanza ragionevole.Modi migliori per implementare un'operazione modulo (domanda algoritmo)
Il problema che sto avendo è con l'implementazione dell'operazione modulo nel moltiplicatore. So che eseguire sottrazioni ripetute funzionerà, ma sarà anche lento. Ho scoperto che potevo spostare il modulo per sottrarre efficacemente i grandi multipli del modulo, ma penso che potrebbero esserci ancora modi migliori per farlo. L'algoritmo che sto usando opere qualcosa di simile (pseudocodice strano segue):
result,modulus : integer (n bits) (previously defined)
shiftcount : integer (initialized to zero)
while((modulus<result) and (modulus(n-1) != 1)){
modulus = modulus << 1
shiftcount++
}
for(i=shiftcount;i>=0;i--){
if(modulus<result){result = result-modulus}
if(i!=0){modulus = modulus >> 1}
}
Quindi ... è questo un buon algoritmo, o almeno un buon punto di partenza? Wikipedia non discute veramente gli algoritmi per implementare l'operazione modulo, e ogni volta che cerco di cercare altrove trovo documenti di ricerca davvero interessanti ma incredibilmente complicati (e spesso non correlati). Se c'è un modo ovvio per implementare ciò che non vedo, apprezzerei davvero qualche feedback.
è notevolmente più lento di questa moltiplicazione? non sembra che dovrebbe essere; hai gli stessi componenti di base. –
BTW, sono anche frustrato dal modo in cui gli articoli di Wikipedia sono sempre più scritti da matematici.Solo perché qualcosa può essere facilmente espresso usando concetti avanzati e notazione non significa che sia il modo migliore per spiegarlo ;-) È simile alle discussioni su Stackoverflow rispetto a quelle su Mathoverflow. – phkahler