{VERSION 6 0 "IBM INTEL NT" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 256 "" 1 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{PSTYLE "Normal " -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Heading 1" 0 3 1 {CSTYLE "" -1 -1 "" 1 18 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }1 0 0 0 8 4 0 0 0 0 0 0 -1 0 }{PSTYLE "Heading \+ 2" -1 4 1 {CSTYLE "" -1 -1 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 1 1 1 1 } 1 1 0 0 8 2 1 0 1 0 2 2 0 1 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 "" 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 3 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Maple Outpu t" -1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 } 1 3 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Title" -1 18 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 1 2 2 2 1 1 1 1 }3 1 0 0 12 12 1 0 1 0 2 2 19 1 }{PSTYLE "Author" -1 19 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 1 0 0 8 8 1 0 1 0 2 2 0 1 }} {SECT 0 {EXCHG {PARA 18 "" 0 "" {TEXT -1 36 "Modular Arithmetic and Fa st Powering" }}{PARA 19 "" 0 "" {TEXT -1 14 "Jeremy Johnson" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 18 "Modula r Arithmetic" }}{PARA 0 "" 0 "" {TEXT -1 101 "Use mod function after e very arithmetic operation. By default the positive representatives ar e used." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "3*3 mod 5;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "1/2 mod 5;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"$ " }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 32 "For the symmetric form use mo ds." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "mods(4,5);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#!\"\"" }}}}{SECT 1 {PARA 4 "" 0 "" {TEXT 256 16 "Computing Powers" }}{PARA 0 "" 0 "" {TEXT -1 77 "Several recur sive and iterative functions for computing powers are presented." }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "Powerit := proc(M,e)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " local i,nu;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 " if (e = 0) then return \+ 1 fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 10 " nu := M;" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 24 " for i from 1 to e-1 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " nu := nu*M;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 12 " return nu;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(Pow eritGf*6$%\"MG%\"eG6$%\"iG%#nuG6\"F,C&@$/9%\"\"!O\"\"\">8%9$?(8$F3F3,& F0F3F3!\"\"%%trueG>F5*&F5F3F6F3OF5F,F,F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "Powerit(2,0);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\" \"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "Powerrec1 := proc(M,e )" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 " if e = 0 then return 1 fi; \+ " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " return M*Powerrec1(M,e-1);" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*Powerrec1Gf*6$%\"MG%\"eG6\"F)F)C$@$/9%\"\"!O\"\"\"O*&9$F0-F$6 $F3,&F-F0F0!\"\"F0F)F)F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "Powerrec1(2,5);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#K" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "Powerrec := proc(M,e)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 10 " local P;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " if e = 0 then return 1 fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 " P := Powerrec(M,floor(e/2));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " P := P * P;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " if type(e,odd) t hen P := P*M; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 11 " return P;" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%)PowerrecGf*6$%\"MG%\"eG6#%\"PG6\"F+C'@$/9%\"\"!O\"\"\">8$-F$6 $9$-%&floorG6#,$*&#F2\"\"#F2F/F2F2>F4*&F4F2F4F2@$-%%typeG6$F/%$oddG>F4 *&F4F2F7F2OF4F+F+F+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "Powe rrec(2,10);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"%C5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "Powerrec(3,100) mod 100;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "Powerrec(3,100);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"Q,?_2@qs7il( H6YO5L6?t?vP:&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "Powerrecm od := proc(M,e,n)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 10 " local P;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " if e = 0 then return 1 fi;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " P := Powerrecmod(M,floor(e/2),n); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " P := P * P mod n;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 41 " if type(e,odd) then P := P*M mod n; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 11 " return P;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%,Powerrecmod Gf*6%%\"MG%\"eG%\"nG6#%\"PG6\"F,C'@$/9%\"\"!O\"\"\">8$-F$6%9$-%&floorG 6#,$*&#F3\"\"#F3F0F3F39&>F5-%$modG6$*&F5F3F5F3F@@$-%%typeG6$F0%$oddG>F 5-FC6$*&F5F3F8F3F@OF5F,F,F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "Powerrecmod(3,5,7);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"&" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "Powerrec(3,5) mod 7;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "time(Powerrec(3,1000000) mod 1023);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"$^&!\"$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "time(Powerrecmod(3,1000000,1023));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"\"!F$" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 169 "In Maple, powe rs are computed using the ^ notation. If you want to incorporate the \+ mod function into the computation of powers you need to use the inert \+ function Power." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 6 "3^100;" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#\"Q,?_2@qs7il(H6YO5L6?t?vP:&" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "Power(3,100) mod 100;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 27 "Analysis of Binary Powering" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "PowerRec := proc(a,e)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 10 " local y;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " if (e = 0) \+ then return 1; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " if (e = 1) \+ then return a; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " y := PowerR ec(a,floor(e/2)); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 11 " y := y*y;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 " if (e mod 2) = 1 then y := y*a; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " return y; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%)Pow erRecGf*6$%\"aG%\"eG6#%\"yG6\"F+C(@$/9%\"\"!O\"\"\"@$/F/F2O9$>8$-F$6$F 6-%&floorG6#,$*&#F2\"\"#F2F/F2F2>F8*&F8F2F8F2@$/-%$modG6$F/FAF2>F8*&F8 F2F6F2OF8F+F+F+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "PowerRec (2,10);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"%C5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "PowerRec(2,15);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"&oF$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "PowerRecCou nt := proc(a,e)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " local count;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " if (e = 0) then return 0; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " if (e = 1) then return 0; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 40 " count := PowerRecCount(a,floor( e/2)); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 21 " count := count + 1;" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 47 " if (e mod 2) = 1 then count := c ount + 1; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " return count; \+ " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%.PowerRecCountGf*6$%\"aG%\"eG6#%&countG6\"F+C(@$/9%\" \"!OF0@$/F/\"\"\"OF0>8$-F$6$9$-%&floorG6#,$*&#F4\"\"#F4F/F4F4>F7,&F7F4 F4F4@$/-%$modG6$F/FAF4>F7FCOF7F+F+F+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "PowerRecCount(a,8);" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#\"\"$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "PowerRecCount(a, 9);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "data := [seq([e,PowerRecCount(a,e)],e=0..128)]: " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "with(plots):" }}{PARA 7 "" 1 "" {TEXT -1 50 "Warning, the name changecoords has been redefin ed\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "pointplot(data,styl e=LINE);" }}{PARA 13 "" 1 "" {GLPLOT2D 486 486 486 {PLOTDATA 2 "6$-%'C URVESG6#7]s7$$\"\"!F)F(7$$\"\"\"F)F(7$$\"\"#F)F+7$$\"\"$F)F.7$$\"\"%F) F.7$$\"\"&F)F17$$\"\"'F)F17$$\"\"(F)F47$$\"\")F)F17$$\"\"*F)F47$$\"#5F )F47$$\"#6F)F77$$\"#7F)F47$$\"#8F)F77$$\"#9F)F77$$\"#:F)F:7$$\"#;F)F47 $$\"#F)F:7$$\"#?F)F77$$\"#@F)F:7$$\"#AF)F:7$$\" #BF)F=7$$\"#CF)F77$$\"#DF)F:7$$\"#EF)F:7$$\"#FF)F=7$$\"#GF)F:7$$\"#HF) F=7$$\"#IF)F=7$$\"#JF)F@7$$\"#KF)F77$$\"#LF)F:7$$\"#MF)F:7$$\"#NF)F=7$ $\"#OF)F:7$$\"#PF)F=7$$\"#QF)F=7$$\"#RF)F@7$$\"#SF)F:7$$\"#TF)F=7$$\"# UF)F=7$$\"#VF)F@7$$\"#WF)F=7$$\"#XF)F@7$$\"#YF)F@7$$\"#ZF)FC7$$\"#[F)F :7$$\"#\\F)F=7$$\"#]F)F=7$$\"#^F)F@7$$\"#_F)F=7$$\"#`F)F@7$$\"#aF)F@7$ $\"#bF)FC7$$\"#cF)F=7$$\"#dF)F@7$$\"#eF)F@7$$\"#fF)FC7$$\"#gF)F@7$$\"# hF)FC7$$\"#iF)FC7$$\"#jF)FF7$$\"#kF)F:7$$\"#lF)F=7$$\"#mF)F=7$$\"#nF)F @7$$\"#oF)F=7$$\"#pF)F@7$$\"#qF)F@7$$\"#rF)FC7$$\"#sF)F=7$$\"#tF)F@7$$ \"#uF)F@7$$\"#vF)FC7$$\"#wF)F@7$$\"#xF)FC7$$\"#yF)FC7$$\"#zF)FF7$$\"#! )F)F=7$$\"#\")F)F@7$$\"##)F)F@7$$\"#$)F)FC7$$\"#%)F)F@7$$\"#&)F)FC7$$ \"#')F)FC7$$\"#()F)FF7$$\"#))F)F@7$$\"#*)F)FC7$$\"#!*F)FC7$$\"#\"*F)FF 7$$\"##*F)FC7$$\"#$*F)FF7$$\"#%*F)FF7$$\"#&*F)FI7$$\"#'*F)F=7$$\"#(*F) F@7$$\"#)*F)F@7$$\"#**F)FC7$$\"$+\"F)F@7$$\"$,\"F)FC7$$\"$-\"F)FC7$$\" $.\"F)FF7$$\"$/\"F)F@7$$\"$0\"F)FC7$$\"$1\"F)FC7$$\"$2\"F)FF7$$\"$3\"F )FC7$$\"$4\"F)FF7$$\"$5\"F)FF7$$\"$6\"F)FI7$$\"$7\"F)F@7$$\"$8\"F)FC7$ $\"$9\"F)FC7$$\"$:\"F)FF7$$\"$;\"F)FC7$$\"$<\"F)FF7$$\"$=\"F)FF7$$\"$> \"F)FI7$$\"$?\"F)FC7$$\"$@\"F)FF7$$\"$A\"F)FF7$$\"$B\"F)FI7$$\"$C\"F)F F7$$\"$D\"F)FI7$$\"$E\"F)FI7$$\"$F\"F)FL7$$\"$G\"F)F=-%&STYLEG6#%%LINE G" 1 6 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" } }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "counts := seq(PowerRecCou nt(a,e),e=8..16);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'countsG6+\"\"$ \"\"%F'\"\"&F'F(F(\"\"'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "seq(convert(e,binary),e=8..16);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 +\"%+5\"%,5\"%55\"%65\"%+6\"%,6\"%56\"%66\"&++\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "numbits := proc(n)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " local count, nb;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " count := 0; nb := n;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " wh ile (nb <> 0) do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 48 " if nb mod 2 = 1 then count := count + 1; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " nb := floor(nb/2);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " return count;" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%(numb itsGf*6#%\"nG6$%&countG%#nbG6\"F+C&>8$\"\"!>8%9$?(F+\"\"\"F4F+0F1F/C$@ $/-%$modG6$F1\"\"#F4>F.,&F.F4F4F4>F1-%&floorG6#,$*&#F4F " 0 "" {MPLTEXT 1 0 24 "seq(numbits(e),e=8.. 16);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6+\"\"\"\"\"#F$\"\"$F$F%F%\"\"%F #" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "counts := seq(PowerRec Count(a,e),e=8..16);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'countsG6+\" \"$\"\"%F'\"\"&F'F(F(\"\"'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 64 "counts2 := seq(floor(simplify(log[2](e)))+numbits(e)-1,e=8..16); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(counts2G6+\"\"$\"\"%F'\"\"&F'F( F(\"\"'F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 75 "seq(PowerRecCo unt(a,e)-(floor(simplify(log[2](e)))+numbits(e)-1),e=1..128);" }} {PARA 12 "" 1 "" {XPPMATH 20 "6\\s\"\"!F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F #F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F #F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F #F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F#F #F#F#F#F#F#F#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 0 "" }}}}{MARK "1" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }