Bucky Number Arithmetic Algorithms

Robin Chapman answered an email and said BuckyNumbers are isomorphic to the cyclotomic fields.
His website is:
http://www.secamlocal.ex.ac.uk/people/staff/rjchapma/rjc.html

Rowland, Todd. "Cyclotomic Field." From MathWorld--A Wolfram Web Resource, created by Eric W. Weisstein. http://mathworld.wolfram.com/CyclotomicField.html

The number of dimensions the nth cyclotomic field has is given by the Euler totient function.

Weisstein, Eric W. "Totient Function." From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/TotientFunction.html

The proof that the nth cyclotomic field has n - 1 dimensions when n is a prime number is not trivial according to Robin Chapman.

Multiplication

The n coordinates of a B_n number add up to zero. You make the outer product to make an n by n table of the multiplication products of the coordinates in two B_n numbers when you want to multiply B_n numbers. Then you have to decide how to add up the results and where to put them into the n coordinates of the result. The coordinates of each B_n number are labeled 1 to n and the rule is to add up the products in the table that have the same sum of labels (j-residue n). (j-residue n) is almost like congruence modulo n but gives results 1 to n instead of 0 to n-1. So 5 (mod 5) is 0 but 5 (j-residue 5) is 5. You could just work from the 5 by 5 table for B_5 multiplication, but,  labels (1,2,3,4,5) + (5,4,3,2,1) (j-residue 5) = (1,1,1,1,1) for B_5 numbers, so the inner product of a B_5 number with the reverse of the other B_5 number goes in the first coordinate of the result. Then you rotate the coordinates of one of the B_5 numbers so the labels add up to (2,2,2,2,2), then (3,3,3,3,3), (4,4,4,4,4), and (5,5,5,5,5) (j-residue 5) and put the inner products into coordinates 2,3,4 and 5 respectively. You divide each inner product by (-n) for B_n numbers. Then some B_4 numbers, B[1,-1,1,-1] for instance, do not have a multiplicative inverse because B_4 numbers are isomorphic to the 4th cyclotomic field which has two dimensions and B_4 numbers have three dimensions, not two. B_n numbers work right when n is a prime number and the coordinates are exact rational numbers or B_m numbers, n not equal to m (m is prime too).

Division

You can divide B_n numbers c/d  by solving the matrix equation Mx = c for the unknown vector x where M is an n by n matrix for the B number d. It is only necessary to know the first row of the matrix M, because each subsequent row is a rotation to the right one position of the row above it.
FirstRowofM[x_List] := -Reverse[x]/Length[x] + 1/Length[x]
FirstRowofM[{a, b, c}] == {1/3 - c/3, 1/3 - b/3, 1/3 - a/3}
But, the multiplicative inverse of a B_n number, when n is a prime number, can be found without creating the matrix M and storing it in computer memory, and without having to solve the linear algebra problem.
The matrix M is called a circulant matrix. Its eigen values can be computed quickly with a formula that uses powers of the nth roots of unity. The product of the eigen values is the determinant of the matrix M, and it is a rational number.
Weisstein, Eric W. "Circulant Matrix." From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/CirculantMatrix.html
The nth roots of unity are usually defined as complex numbers e^(2*Pi*i*k/n), for k = 0 .. (n - 1), and i = Sqrt[-1], or equivalently Cos[2*Pi*k/n] + i*Sin[2*Pi*k/n]. But the nth roots of unity are rotations of the coordinates of unity for B_n numbers (nth roots of unity = RotateLeft[unity, k] for k = 0 .. (n - 1)). Unity for B_ 3 numbers is B[1, 1, -2]; for B_ 5 numbers B[1, 1, 1, 1, -4] etc .. So, the eigen values for the matrix M, for a B_n number b, are themselves B_n numbers . The first eigen value e[1] is always unity, and the last e[n], is always b itself. The partial product of the eigen values, e[1]*e[2]* ... e[n - 1], divided by the full product e[1]*e[2]* ... e[n], is equal to 1/e[n] = 1/b. You only need the first coordinate of the full product of the eigen values, so, you divide the partial product by a scalar. (and that' s the point : you don' t know how to divide by a B_n number unless the first n - 1 coordinates are all the same; then it' s the same as dividing by a scalar).

The Initialization Cells section has the Mathematica code for the BuckyNumber algorithms.


Created by Wolfram Mathematica 6.0  (29 March 2008) Valid XHTML 1.1!