Montgomery-algoritmen är en teknik som gör att du kan påskynda multiplikations- och kvadreringsoperationerna som krävs när du höjer ett tal till en effektmodul när modulen är stor (i storleksordningen hundratals bitar). Föreslogs 1985 av Peter Montgomery .
Givet heltal a, b < n , r , GCD beräknar Montgomery-algoritmen
I applikationer tas det vanligtvis , eftersom i det här fallet är division med en rest och multiplikation med inuti algoritmen snabba.
Låt oss definiera n -resten ( n -resten) av talet som .
Montgomerys algoritm använder egenskapen att mängden är ett komplett restsystem , det vill säga den innehåller alla tal från 0 till n-1 .
MonPro beräknar . Resultatet är n-resten av , eftersom
Låt oss definiera n' så att . och kan beräknas med den utökade euklidiska algoritmen .
Fungera
1. 2. 3. medan 4. återvändaNär multiplikation och division med utförs mycket snabbt, eftersom de bara är bitförskjutningar, och när slingan på rad 3 inte kommer att utföras mer än en gång. Således är Montgomerys algoritm snabbare än den vanliga beräkningen , vilket innebär att dividera med n. Beräkningen av n' och omvandlingen av tal till n-rester och vice versa är dock tidskrävande operationer, som ett resultat av vilka det verkar orimligt att använda Montgomery-algoritmen när man beräknar produkten av två tal en gång.
Att använda Montgomery-algoritmen motiverar sig själv när man höjer ett tal till en effektmodul .
Fungera
1. 2. 3. för i=j-1 ner till 0 om då 4. återvändaAtt höja ett tal till en potens av bitlängd k med algoritmen "kvadrat och multiplicera" involverar multiplikationer av k till 2k, där k är i storleksordningen hundratals eller tusentals bitar. När du använder Montgomerys exponentieringsalgoritm, är mängden ytterligare beräkningar fast (beräkningar , , i början och i slutet), och MonPro-operationen är snabbare än den vanliga modulo multiplikationen [1] , så Montgomerys exponentieringsalgoritm kommer att ge en prestandavinst jämfört med algoritmen "kvaddra och multiplicera . "