{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 Comment" 2 18 "" 0 1 0 0 0 0 0 0 0 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 }{CSTYLE "" -1 257 "" 1 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 258 "" 1 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "T imes" 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 "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 "Heading 3" -1 5 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 1 1 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Diagnostic" -1 9 1 {CSTYLE "" -1 -1 "C ourier" 1 10 64 128 64 1 2 2 2 2 2 1 1 1 3 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{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 O utput" -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 "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 23 "The Euclidean Algorithm" }}{PARA 19 "" 0 "" {TEXT -1 14 "Jeremy Johnson" }}}{SECT 1 {PARA 4 "" 0 "" {TEXT 256 17 "Fibonacci Numbers" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "# Recursive procedure to compute Fibonacci numbers." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "fib := proc(n)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " if (n = 0) then return 0;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " else if (n = 1) then return 1;" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 37 " else return fib(n-1)+fib(n-2);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 10 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%$fibGf*6#%\"nG6\"F(F(@%/9$\"\"!OF,@%/F+\"\"\"OF0O,& -F$6#,&F+F0F0!\"\"F0-F$6#,&F+F0\"\"#F7F0F(F(F(" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 7 "fib(1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\" \"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "seq(fib(i),i=0..20); " }}{PARA 11 "" 1 "" {XPPMATH 20 "67\"\"!\"\"\"F$\"\"#\"\"$\"\"&\"\") \"#8\"#@\"#M\"#b\"#*)\"$W\"\"$L#\"$x$\"$5'\"$()*\"%(f\"\"%%e#\"%\"=%\" %ln" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "trace(fib);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#%$fibG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 7 "fib(3);" }}{PARA 9 "" 1 "" {TEXT -1 24 "\{--> enter fi b, args = 3" }}{PARA 9 "" 1 "" {TEXT -1 24 "\{--> enter fib, args = 2 " }}{PARA 9 "" 1 "" {TEXT -1 24 "\{--> enter fib, args = 1" }}{PARA 9 "" 1 "" {TEXT -1 30 "<-- exit fib (now in fib) = 1\}" }}{PARA 9 "" 1 " " {TEXT -1 24 "\{--> enter fib, args = 0" }}{PARA 9 "" 1 "" {TEXT -1 30 "<-- exit fib (now in fib) = 0\}" }}{PARA 9 "" 1 "" {TEXT -1 30 "<- - exit fib (now in fib) = 1\}" }}{PARA 9 "" 1 "" {TEXT -1 24 "\{--> en ter fib, args = 1" }}{PARA 9 "" 1 "" {TEXT -1 30 "<-- exit fib (now in fib) = 1\}" }}{PARA 9 "" 1 "" {TEXT -1 36 "<-- exit fib (now at top l evel) = 2\}" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "untrace(fib);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%$fibG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "t0 := time():" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "seq(fib(i),i =1..22):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "time()-t0;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"%#R\"!\"$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "# Iterative procedure to compute Fibonacci numbe rs." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "fibit := proc(n)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " local i, f0,f1,f;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " if (n = 0) then return 0; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " if (n = 1) then return 1; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " f0 := 0; f1 := 1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " for i from 2 to n do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " \+ f := f0 + f1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " f0 := f1; f1 := f;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 11 " return f;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "en d;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%&fibitGf*6#%\"nG6&%\"iG%#f0G%# f1G%\"fG6\"F-C(@$/9$\"\"!OF2@$/F1\"\"\"OF6>8%F2>8&F6?(8$\"\"#F6F1%%tru eGC%>8',&F9F6F;F6>F9F;>F;FBOFBF-F-F-" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "seq(fibit(i),i=0..20);" }}{PARA 11 "" 1 "" {XPPMATH 20 "67\"\"!\"\"\"F$\"\"#\"\"$\"\"&\"\")\"#8\"#@\"#M\"#b\"#*)\"$W\"\"$L #\"$x$\"$5'\"$()*\"%(f\"\"%%e#\"%\"=%\"%ln" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 13 "t0 := time():" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "seq(fibit(i),i=1..22):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "time()-t0;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"\"!F $" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 74 "# recursive procedure \+ for computing Fibonacci numbers with option remember" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 76 "# This option causes a table to be created where values of fib(n) are stored" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 77 "# T his table is consulted and when a result was previously computed its v alue" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 75 "# is obtained from the tabl e rather than recomputing it. This dramatically" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "# reduces the computing time." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "fib := proc(n)option remember;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " if (n = 0) then return 0;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " else if (n = 1) then return 1;" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 37 " else return fib(n-1)+fib(n-2);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 10 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%$fibGf*6#%\"nG6\"6#%)rememberGF(@%/9$\"\"!OF.@%/F- \"\"\"OF2O,&-F$6#,&F-F2F2!\"\"F2-F$6#,&F-F2\"\"#F9F2F(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "t0 := time():" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "seq(fib(i),i=1..22):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "time() - t0;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# $\"\"!F$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "trace(fib);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#%$fibG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 7 "fib(5);" }}{PARA 9 "" 1 "" {TEXT -1 44 "value remember ed (at top level): fib(5) -> 5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\" &" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "fib(30);" }}{PARA 9 "" 1 "" {TEXT -1 25 "\{--> enter fib, args = 30" }}{PARA 9 "" 1 "" {TEXT -1 25 "\{--> enter fib, args = 29" }}{PARA 9 "" 1 "" {TEXT -1 25 "\{-- > enter fib, args = 28" }}{PARA 9 "" 1 "" {TEXT -1 25 "\{--> enter fib , args = 27" }}{PARA 9 "" 1 "" {TEXT -1 25 "\{--> enter fib, args = 26 " }}{PARA 9 "" 1 "" {TEXT -1 25 "\{--> enter fib, args = 25" }}{PARA 9 "" 1 "" {TEXT -1 25 "\{--> enter fib, args = 24" }}{PARA 9 "" 1 "" {TEXT -1 25 "\{--> enter fib, args = 23" }}{PARA 9 "" 1 "" {TEXT -1 43 "value remembered (in fib): fib(22) -> 17711" }}{PARA 9 "" 1 "" {TEXT -1 43 "value remembered (in fib): fib(21) -> 10946" }}{PARA 9 " " 1 "" {TEXT -1 34 "<-- exit fib (now in fib) = 28657\}" }}{PARA 9 "" 1 "" {TEXT -1 43 "value remembered (in fib): fib(22) -> 17711" }} {PARA 9 "" 1 "" {TEXT -1 34 "<-- exit fib (now in fib) = 46368\}" }} {PARA 9 "" 1 "" {TEXT -1 43 "value remembered (in fib): fib(23) -> 286 57" }}{PARA 9 "" 1 "" {TEXT -1 34 "<-- exit fib (now in fib) = 75025\} " }}{PARA 9 "" 1 "" {TEXT -1 43 "value remembered (in fib): fib(24) -> 46368" }}{PARA 9 "" 1 "" {TEXT -1 35 "<-- exit fib (now in fib) = 121 393\}" }}{PARA 9 "" 1 "" {TEXT -1 43 "value remembered (in fib): fib(2 5) -> 75025" }}{PARA 9 "" 1 "" {TEXT -1 35 "<-- exit fib (now in fib) \+ = 196418\}" }}{PARA 9 "" 1 "" {TEXT -1 44 "value remembered (in fib): \+ fib(26) -> 121393" }}{PARA 9 "" 1 "" {TEXT -1 35 "<-- exit fib (now in fib) = 317811\}" }}{PARA 9 "" 1 "" {TEXT -1 44 "value remembered (in \+ fib): fib(27) -> 196418" }}{PARA 9 "" 1 "" {TEXT -1 35 "<-- exit fib ( now in fib) = 514229\}" }}{PARA 9 "" 1 "" {TEXT -1 44 "value remembere d (in fib): fib(28) -> 317811" }}{PARA 9 "" 1 "" {TEXT -1 41 "<-- exit fib (now at top level) = 832040\}" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# \"'S?$)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "fib(30);" }} {PARA 9 "" 1 "" {TEXT -1 50 "value remembered (at top level): fib(30) \+ -> 832040" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"'S?$)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "f := 'f';" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fGF$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "rsolve(\{f(n ) = f(n-1) + f(n-2),f(0) = 0, f(1) = 1\},f(n));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&*(\"\"&!\"\"F%#\"\"\"\"\"#),&F'F(*&F)F&F%F'F&%\"nGF(F &*(F%F&F%F'),&F'F(*&F)F&F%F'F(F-F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "f := unapply(%,n);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%\"fGf*6#%\"nG6\"6$%)operatorG%&arrowGF(,&*&#\"\"\"\"\"&F/*&F0#F/\" \"#),&F2F/*&F3!\"\"F0F2F79$F/F/F7*&#F/F0F/*&F0F2),&F2F/*&F3F7F0F2F/F8F /F/F/F(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "fn := unappl y(evalf(%%),n);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#fnGf*6#%\"nG6\"6 $%)operatorG%&arrowGF(,&*&$\"+af8sW!#5\"\"\")$!+!))R.='F09$F1!\"\"*&$ \"+af8sWF0F1)$\"+))R.=;!\"*F5F1F1F(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "seq(f(n),n=0..20);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6 7\"\"!,&*(\"\"&!\"\"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.F5F),&*(F&F'F&F(F+\"\"%F'*(F&F'F&F(F.F9F),&*(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.FDF),&*(F&F'F&F(F+\"\")F'*(F&F'F&F(F.FHF),&*(F&F'F &F(F+\"\"*F'*(F&F'F&F(F.FLF),&*(F&F'F&F(F+\"#5F'*(F&F'F&F(F.FPF),&*(F& F'F&F(F+\"#6F'*(F&F'F&F(F.FTF),&*(F&F'F&F(F+\"#7F'*(F&F'F&F(F.FXF),&*( F&F'F&F(F+\"#8F'*(F&F'F&F(F.FfnF),&*(F&F'F&F(F+\"#9F'*(F&F'F&F(F.FjnF) ,&*(F&F'F&F(F+\"#:F'*(F&F'F&F(F.F^oF),&*(F&F'F&F(F+\"#;F'*(F&F'F&F(F.F boF),&*(F&F'F&F(F+\"#F'*(F&F'F&F(F.F^pF),&*(F&F'F&F(F+\"#?F'*(F&F 'F&F(F.FbpF)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "map(simplif y,[%]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#77\"\"!\"\"\"F%\"\"#\"\"$\" \"&\"\")\"#8\"#@\"#M\"#b\"#*)\"$W\"\"$L#\"$x$\"$5'\"$()*\"%(f\"\"%%e# \"%\"=%\"%ln" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "seq(fn(n),n =0..20);" }}{PARA 12 "" 1 "" {XPPMATH 20 "67$\"\"!F$$\"+#*********!#5F %$\"+(*******>!\"*$\"+%*******HF*$\"+))******\\F*$\"+w******zF*$\"+'** ****H\"!\")$\"+#******4#F3$\"+&)*****R$F3$\"+t*****\\&F3$\"+a******))F 3$\"+\"*****R9!\"($\"+')****HBF>$\"+v****pPF>$\"+e*****4'F>$\"+F****p) *F>$\"+()***pf\"!\"'$\"+y***Re#FI$\"+j***4=%FI$\"+M***\\w'FI" }}}} {SECT 1 {PARA 4 "" 0 "" {TEXT 257 34 "Computing greatest common diviso rs" }}{PARA 0 "" 0 "" {TEXT -1 328 "Maple has a gcd function for compu ting the greatest common divisor of polynomials and a gcd function cal led igcd for computing the greatest common divisor of integers. Map le also provides an extended gcd function (gcdex, igcdex) which comput es in addition to the gcd of inputs a and b, x and y such that a*x + b *y = gcd(a,b)." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 62 "Here is a recursive implementation of the Euclidean algor ithm." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 62 "# A recursive procedure for computing the gcd of two \+ integers." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 40 "mygcd := proc(a::nonne gint,b::nonnegint)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "# assume a >= b." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " if b = 0 then return a fi; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " return mygcd(b, a mod b);" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " end;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&mygcdGf*6$'%\"aG%*nonnegintG'%\"bGF)6\"F,F,C$@$/9%\"\"!O9$O-F $6$F0-%$modG6$F3F0F,F,F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "trace(mygcd);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%&mygcdG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "mygcd(8,5);" }}{PARA 9 "" 1 "" {TEXT -1 29 "\{--> enter mygcd, args = 8, 5" }}{PARA 9 "" 1 "" {TEXT -1 29 "\{--> enter mygcd, args = 5, 3" }}{PARA 9 "" 1 "" {TEXT -1 29 " \{--> enter mygcd, args = 3, 2" }}{PARA 9 "" 1 "" {TEXT -1 29 "\{--> e nter mygcd, args = 2, 1" }}{PARA 9 "" 1 "" {TEXT -1 29 "\{--> enter my gcd, args = 1, 0" }}{PARA 9 "" 1 "" {TEXT -1 34 "<-- exit mygcd (now i n mygcd) = 1\}" }}{PARA 9 "" 1 "" {TEXT -1 34 "<-- exit mygcd (now in \+ mygcd) = 1\}" }}{PARA 9 "" 1 "" {TEXT -1 34 "<-- exit mygcd (now in my gcd) = 1\}" }}{PARA 9 "" 1 "" {TEXT -1 34 "<-- exit mygcd (now in mygc d) = 1\}" }}{PARA 9 "" 1 "" {TEXT -1 38 "<-- exit mygcd (now at top le vel) = 1\}" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "mygcdit := proc(a,b)" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 19 " local a1,a2,a3,q;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " a1 := a; a2 := b;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " w hile (a2 <> 0) do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " a3 := a1 m od a2;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " q := floor(a1/a2);" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 " a1 := a2; a2 := a3;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 12 " return a1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%(mygcditGf*6$%\"aG%\"bG6&%#a1G%#a2G%#a3G% \"qG6\"F.C&>8$9$>8%9%?(F.\"\"\"F7F.0F4\"\"!C&>8&-%$modG6$F1F4>8'-%&flo orG6#*&F1F7F4!\"\">F1F4>F4F " 0 "" {MPLTEXT 1 0 15 "trace(mygcdit);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%( mygcditG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "mygcdit(8,5);" }}{PARA 9 "" 1 "" {TEXT -1 31 "\{--> enter mygcdit, args = 8, 5" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#a1G\"\")" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#a2G\"\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#a3G\" \"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"qG\"\"\"" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%#a1G\"\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#a2G \"\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#a3G\"\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"qG\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#a 1G\"\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#a2G\"\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#a3G\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% \"qG\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#a1G\"\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#a2G\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%#a3G\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"qG\"\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#a1G\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#a2G\"\"!" }}{PARA 9 "" 1 "" {TEXT -1 40 "<-- exit mygcdit (no w at top level) = 1\}" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "# Extended Euclidean Algorit hm." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 58 "mygcdex := proc(a::nonnegint ,b::nonnegint,x::name,y::name)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 " \+ local a1,a2,a3,x1,x2,x3,y1,y2,y3,q;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " a1 := a; a2 := b;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " x1 \+ := 1; y1 := 0; " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " x2 := 0; y2 := 1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " while (a2 <> 0) do" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " a3 := a1 mod a2;" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 22 " q := floor(a1/a2);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " x3 := x1 - q*x2;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " y3 := y1 - q*y2;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 " a 1 := a2; a2 := a3;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 " x1 := x2 ; x2 := x3;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 " y1 := y2; y2 : = y3;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " x := x1; y := y1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 12 " return a1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%(mygcdexGf*6&'%\"aG%*nonnegintG'%\"bGF)'% \"xG%%nameG'%\"yGF.6,%#a1G%#a2G%#a3G%#x1G%#x2G%#x3G%#y1G%#y2G%#y3G%\"q G6\"F8$9$>8%9%>8'\"\"\">8*\"\"!>8(FI>8+FF?(F8&-%$mo dG6$F?FB>8--%&floorG6#*&F?FFFB!\"\">8),&FEFF*&FWFFFKFFFfn>8,,&FHFF*&FW FFFMFFFfn>F?FB>FBFR>FEFK>FKFhn>FHFM>FMF\\o>9&FE>9'FHOF?F " 0 "" {MPLTEXT 1 0 21 "mygcdex(5,7,'x','y');" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "x;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"$" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "y;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#!\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "5*x \+ + 7*y;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{SECT 1 {PARA 5 " " 0 "" {TEXT -1 22 "Recursive Extended GCD" }}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 62 "# A recursive procedure for computing the gcd of tw o integers." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 61 "mygcdexrec := proc(a ::nonnegint,b::nonnegint,x::name,y::name)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "# assume a >= b >= 0." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "local xp, yp, d, q, r;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 16 " \+ if b = 0 then " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " x := 1; y : = 0; return a;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " else" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 21 " r := irem(a,b,q);" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 31 " d := mygcdexrec(b,r,xp,yp);" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 40 " x := yp; y := xp - q*yp; return d;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " end;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%+mygcdexrecGf*6&'%\"aG%*no nnegintG'%\"bGF)'%\"xG%%nameG'%\"yGF.6'%#xpG%#ypG%\"dG%\"qG%\"rG6\"F7@ %/9%\"\"!C%>9&\"\"\">9'F;O9$C'>8(-%%iremG6%FCF:8'>8&-F$6&F:FF8$8%>F>FP >FA,&FOF?*&FJF?FPF?!\"\"OFLF7F7F7" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "mygcdexrec(5,7,'x','y');" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 5 "x; \+ y;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#!\"#" }}}}}{SECT 1 {PARA 4 "" 0 "" {TEXT 258 33 "Probab ility of relative primality" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "Samples := 10000;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "for n from 5 by 5 to 20 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 44 " N := 10^n: c ount := 0: print(\"N = \", N):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " myrand := rand(1..N):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 " for i \+ from 1 to Samples do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 34 " a := my rand(): b := myrand():" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " c := igcd(a,b):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 44 " if (c = 1) then \+ count := count + 1: fi:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od:" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 69 " prob := count/Samples: print(\" prob that gcd = 1 is \",evalf(prob)):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(SamplesG\"&++\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6$Q%N~=~6\"\"'++5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$Q6prob~that~gcd~=~1~is~6\"$\"++++Ph!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$Q%N~=~6\"\",+++++\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$Q6prob~that~gcd~=~1~is~6\"$\"++++%4'!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$Q%N~=~6\"\"1+++++++5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 $Q6prob~that~gcd~=~1~is~6\"$\"++++-h!#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$Q%N~=~6\"\"6++++++++++\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$Q6pr ob~that~gcd~=~1~is~6\"$\"++++!>'!#5" }}}{PARA 0 "" 0 "" {TEXT -1 84 "I t can be shown that if a and b are integers chosen at random, the prob ability that " }{XPPEDIT 18 0 "gcd(a,b) = 1" "6#/-%$gcdG6$%\"aG%\"bG\" \"\"" }{TEXT -1 13 " is equal to " }{XPPEDIT 18 0 "6/Pi^2" "6#*&\"\"' \"\"\"*$%#PiG\"\"#!\"\"" }{TEXT -1 33 " which is approximately equal t o " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "evalf(6/Pi^2);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+;5Fzg!#5" }}}{PARA 0 "" 0 "" {TEXT -1 148 "The following argument shows the plausibility of this re sult. Assume that there is a well defined probability called p. Then the probability that " }{XPPEDIT 18 0 "gcd(a,b) = d" "6#/-%$gcdG6$%\" aG%\"bG%\"dG" }{TEXT -1 13 " is equal to " }{XPPEDIT 18 0 "p*(1/d)^2" "6#*&%\"pG\"\"\"*$*&F%F%%\"dG!\"\"\"\"#F%" }{TEXT -1 76 ". Summing th ese probabilities over all d leads to the following equation: " } {XPPEDIT 18 0 "1 = Sum(p/(d^2),d = 1 .. infinity);" "6#/\"\"\"-%$SumG6 $*&%\"pGF$*$%\"dG\"\"#!\"\"/F+;F$%)infinityG" }{TEXT -1 1 "." }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 52 "Sum(p/d^2,d=1..infinity) = s um(p/d^2,d=1..infinity);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/-%$SumG6$ *&%\"pG\"\"\"*$)%\"dG\"\"#F)!\"\"/F,;F)%)infinityG,$*&F(F))%#PiGF-F)#F )\"\"'" }}}{PARA 0 "" 0 "" {TEXT -1 19 "which implies that " } {XPPEDIT 18 0 "p = 6/Pi^2" "6#/%\"pG*&\"\"'\"\"\"*$%#PiG\"\"#!\"\"" } {TEXT -1 119 ". A more formal proof can be obtained by counting the n umber of pairs (a,b) with 1 <= a,b <= n such that gcd(a,b) = 1." }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 236 "Let's se e how fast the probability approaches this limit. We will compute the exact probability, rather than using a sample as was done in the prev ious experiment, for different values of n. More precisely, we comput e the probability " }{XPPEDIT 18 0 "q[n]" "6#&%\"qG6#%\"nG" }{TEXT -1 54 " = probability that gcd(a,b) = 1 for all 1 <= a,b < n." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "q := 0; n := 10;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"qG\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"nG\"#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "for a from 1 to n do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " for b from 1 to n do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 41 " \+ if igcd(a,b) = 1 then q := q + 1; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "q;" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#\"#j" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "evalf(q/n^2);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+++++j!#5" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 16 "Next we compute " } {XPPEDIT 18 0 "q[n]" "6#&%\"qG6#%\"nG" }{TEXT -1 198 " in a systematic way that can be used to derive a formal proof of the limiting probabi lity. This involves the use of the principle of inclusion-exclusion, \+ the mobius function, and dirichlet series." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "with(numtheory);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7Q%&GIgcdG%)bigomegaG%&cfracG%)cfrac polG%+cyclotomicG%)divisorsG%)factorEQG%*factorsetG%'fermatG%)imagunit G%&indexG%/integral_basisG%)invcfracG%'invphiG%*issqrfreeG%'jacobiG%*k roneckerG%'lambdaG%)legendreG%)mcombineG%)mersenneG%(migcdexG%*minkows kiG%(mipolysG%%mlogG%'mobiusG%&mrootG%&msqrtG%)nearestpG%*nthconverG%) nthdenomG%)nthnumerG%'nthpowG%&orderG%)pdexpandG%$phiG%#piG%*pprimroot G%)primrootG%(quadresG%+rootsunityG%*safeprimeG%&sigmaG%*sq2factorG%(s um2sqrG%$tauG%%thueG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "mob ius(1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 34 "mobius(2); mobius(3); mobius(5);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#!\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#!\" \"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#!\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 40 "mobius(2*3); mobius(2*5); mobius(3*5);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\" \"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 42 "mobius(2^2); mobius(3^2); mobius(2^2*3);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 102 "n^2 - floor(n/2)^2 - floor(n/3)^2 - floor(n /5)^2 - floor(n/7)^2 + floor(n/(2*3))^2 + floor(n/(2*5))^2;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#j" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 73 "Sum(mobius(k)*floor(n/k)^2,k=1..n) = sum(mobius(k)*floor(n/k)^ 2,k=1..10);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/-%$SumG6$*&-%'mobiusG6 #%\"kG\"\"\")-%&floorG6#,$*&\"#5F,F+!\"\"F,\"\"#F,/F+;F,F3\"#j" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "q := 0; n := 100;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"qG\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"nG\"$+\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "for a fr om 1 to n do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " for b from 1 to n do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 41 " if igcd(a,b) = 1 then q \+ := q + 1; fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " od;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "q;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"%(3'" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 13 "evalf(q/n^2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"++++(3'!#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 72 "Sum(mob ius(k)*floor(n/k)^2,k=1..n) = sum(mobius(k)*floor(n/k)^2,k=1..n);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#/-%$SumG6$*&-%'mobiusG6#%\"kG\"\"\")-% &floorG6#,$*&\"$+\"F,F+!\"\"F,\"\"#F,/F+;F,F3\"%(3'" }}}{PARA 0 "" 0 " " {TEXT -1 6 "Since " }{XPPEDIT 18 0 "abs(Sum(mobius(k)*floor(n/k)^2,k =1..n) - Sum(mobius(k)*(n/k)^2,k=1..n) = O(n*harmonic(n))" "6#-%$absG6 #/,&-%$SumG6$*&-%'mobiusG6#%\"kG\"\"\"*$-%&floorG6#*&%\"nGF0F/!\"\"\" \"#F0/F/;F0F6F0-F)6$*&-F-6#F/F0*$*&F6F0F/F7F8F0/F/;F0F6F7-%\"OG6#*&F6F 0-%)harmonicG6#F6F0" }{TEXT -1 1 "," }{XPPEDIT 18 0 "limit(abs(Sum(mob ius(k)*floor(n/k)^2,k=1..n) - Sum(mobius(k)*(n/k)^2,k=1..n)/n^2) = 0" "6#-%&limitG6#/-%$absG6#,&-%$SumG6$*&-%'mobiusG6#%\"kG\"\"\"*$-%&floor G6#*&%\"nGF3F2!\"\"\"\"#F3/F2;F3F9F3*&-F,6$*&-F06#F2F3*$*&F9F3F2F:F;F3 /F2;F3F9F3*$F9F;F:F:\"\"!" }{TEXT -1 6 ", and " }{XPPEDIT 18 0 "limit( q[n]/n^2),n=infinity) = Sum(mobius(k)*(n/k)^2,k=1..n)" "6#/6$-%&limitG 6#*&&%\"qG6#%\"nG\"\"\"*$F,\"\"#!\"\"/F,%)infinityG-%$SumG6$*&-%'mobiu sG6#%\"kGF-*$*&F,F-F:F0F/F-/F:;F-F," }{TEXT -1 1 "." }}{PARA 0 "" 0 " " {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 41 "The Mobius inversion th eorem states that " }{XPPEDIT 18 0 "sum(mobius(d),d) = 0" "6#/-%$sumG6 $-%'mobiusG6#%\"dGF*\"\"!" }{TEXT -1 34 ", where d divides n. Therefo re, " }{XPPEDIT 18 0 "sum(mobius(k)(n/k)^2,k=1..infinity) * sum(1/k^2 ,k=1..infinity) = 1" "6#/*&-%$sumG6$*$--%'mobiusG6#%\"kG6#*&%\"nG\"\" \"F-!\"\"\"\"#/F-;F1%)infinityGF1-F&6$*&F1F1*$F-F3F2/F-;F1F6F1F1" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "1/sum(1/k^2,k=1..infinity); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&\"\"'\"\"\"%#PiG!\"#F&" }}}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 0 "" }}}}{MARK "3" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }