In APL (NARS2000, free) :
size ← 15 2 2⍴(0)((1,size)⍴⍳size)((size,1)⍴⍳size)(gcd_sieve size) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 3 1 1 3 1 1 3 1 1 3 1 1 3 1 1 3 4 1 2 1 4 1 2 1 4 1 2 1 4 1 2 1 5 1 1 1 1 5 1 1 1 1 5 1 1 1 1 5 6 1 2 3 2 1 6 1 2 3 2 1 6 1 2 3 7 1 1 1 1 1 1 7 1 1 1 1 1 1 7 1 8 1 2 1 4 1 2 1 8 1 2 1 4 1 2 1 9 1 1 3 1 1 3 1 1 9 1 1 3 1 1 3 10 1 2 1 2 5 2 1 2 1 10 1 2 1 2 5 11 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 12 1 2 3 4 1 6 1 4 3 2 1 12 1 2 3 13 1 1 1 1 1 1 1 1 1 1 1 1 13 1 1 14 1 2 1 2 1 2 7 2 1 2 1 2 1 14 1 15 1 1 3 1 5 3 1 1 3 5 1 3 1 1 15
And copy + paste this code :
⎕cr'gcd_sieve' gcdmatrix ← gcd_sieve size;i;temp gcdmatrix ← (size,size)⍴1 :for i :in 1+⍳¯1+⌊size÷2 gcdmatrix[i×temp∘.,temp←⍳⌊size÷i] ← i :endfor gcdmatrix[⊂[2]((⌈size÷2),2)⍴2/temp] ← temp ← (⌊size÷2)+⍳⌈size÷2
Example
gcd_array ← gcd_sieve 15 gcd_array[8;12] 4 gcd_array[12;6] 6 gcd_array[7;5] 1
Have a nice day.