Re: Re: Code to translate to negative base...

*To*: mathgroup at smc.vnet.net*Subject*: [mg64676] Re: [mg64591] Re: Code to translate to negative base...*From*: Richard Palmer <mapsinc at bellatlantic.net>*Date*: Sun, 26 Feb 2006 05:07:58 -0500 (EST)*Sender*: owner-wri-mathgroup at wolfram.com

It is nice to be on a list with the best programmers in the world. I owe you too a coffee or a drink whenever you get to Boston. Richard Palmer On 2/23/06 12:34 AM, "Cca" <cca at gregosetroianos.mat.br> wrote: >> Does anyone have code to translate to a negative base? > > Surprinsingly enough, this is very simple, although not much known among > students. I find the approach below conceptually very intuitive and ellegant: > everything depends on a REMAINDER function. > > Suppose that you already have implemented the traditional algorithm that gives > you the digits of a integer number N in base B, for B>0 in Integers. Then, > just enter with a negative value for B and you will get what you want. > Let me ellaborate on this a little. We can see the traditional algorithm as a > Mathematica command, say (although below I´ll not give any formatting > instructions) > > myBaseForm[A, B, r] > > where r is a REMAINDER FUNCTION, that is, a rule > > r[A, B] > > such that A is congruent to r[A,B] mod B. The Euclidean remainder -- the > "standard" one -- is given by > > r[A_, B_] := A - Abs[B]*Floor[A/Abs[B]] > > or, using Mathematica Mod, > > r[A_, B_] := Mod[A, Abs[B]] > > For each A in Integers, this gives the UNIQUE number r such that A is > congruent to r mod B and 0<=r<Abs[B]. > > So, using the notations above, he following would always return True: > > myBaseForm[A, B] == BaseForm[A, B, Mod[#1, Abs[#2]] & ] > > This means that what you want is just > > myBaseForm[A, -B] > > Here is a direct implementation of the ideas above: > > myBaseForm[a_, base_, r_:(Mod[#1, Abs[#2]] & )] := > Reverse[Drop[(r[#1, base] & ) /@ > FixedPointList[(#1 - r[#1, base])/base & , > a], -2]] > > Some examples for comparison: > > IntegerDigits[200, 3] > {2,1,1,0,2} > > myBaseForm[200, 3] > {2,1,1,0,2} > > myBaseForm[21, -10] > {1,8,1} > > > Carlos César de Araújo > Gregos & Troianos Educacional > www.gregosetroianos.mat.br > Belo Horizonte, MG, Brasil > (31) 3283-1122 >