OFFSET
0,5
COMMENTS
Notation: (3)<n>(1).
Extension to negative n: a(-n) = -a(n). - Franklin T. Adams-Watters, May 13 2009
Row sums of A059095. - Rémy Sigrist, Oct 05 2019
LINKS
Reinhard Zumkeller, Table of n, a(n) for n = 0..10000
F. T. Adams-Watters and F. Ruskey, Generating Functions for the Digital Sum and Other Digit Counting Sequences, JIS 12 (2009) 09.5.6.
Daniel Forgues, Table of n, a(n) for n = 0..100000
FORMULA
G.f.: (1/(1-x))*Sum_{k>=0} (x^3^k - x^(2*3^k))/(x^((3^k-1)/2)*(1 + x^3^k + x^(2*3^k))). - Franklin T. Adams-Watters, May 13 2009
a(3*n - 1) = a(n) - 1, a(3*n) = a(n), a(3*n + 1) = a(n) + 1. - Thomas König, Jun 24 2020
EXAMPLE
5 = + 1(9) - 1(3) - 1(1) -> +1 - 1 - 1 = -1 = a(5).
MAPLE
a:= proc(n) `if`(n=0, 0, (d-> `if`(d=2,
a(q+1)-1, d+a(q)))(irem(n, 3, 'q')))
end:
seq(a(n), n=0..120); # Alois P. Heinz, Jan 09 2020
MATHEMATICA
balTernDigits[0] := {0}; balTernDigits[n_/; n > 0] := Module[{unParsed = n, currRem, currExp = 1, digitList = {}, nextDigit}, While[unParsed > 0, If[unParsed == 3^(currExp - 1), digitList = Append[digitList, 1]; unParsed = 0, currRem = Mod[unParsed, 3^currExp]/3^(currExp - 1); nextDigit = Switch[currRem, 0, 0, 2, -1, 1, 1]; digitList = Append[digitList, nextDigit]; unParsed = unParsed - nextDigit * 3^(currExp - 1)]; currExp++]; digitList = Reverse[digitList]; Return[digitList]]; balTernDigits[n_/; n < 0] := (-1)balTernDigits[Abs[n]]; Table[Plus@@balTernDigits[n], {n, 0, 108}] (* Alonso del Arte, Feb 25 2011 *)
terVal[lst_List] := Reverse[lst].(3^Range[0, Length[lst] - 1]); maxDig = 4; t = Table[0, {3 * 3^maxDig/2}]; t[[1]] = 1; Do[d = IntegerDigits[Range[0, 3^dig - 1], 3, dig]/.{2 -> -1}; d = Prepend[#, 1]&/@d; t[[terVal/@d]] = Total/@d, {dig, maxDig}]; Prepend[t, 0] (* T. D. Noe, Feb 24 2011 *)
Array[Total[Prepend[IntegerDigits[#, 3], 0] //. {a___, b_, 2, c___} :> {a, b + 1, -1, c}] &, 109, 0] (* Michael De Vlieger, Jun 27 2020 *)
PROG
(Python)
def a(n):
s=0
x=0
while n>0:
x=n%3
n=n//3
if x==2:
x=-1
n+=1
s+=x
return s
print([a(n) for n in range(101)]) # Indranil Ghosh, Jun 06 2017
(PARI) bt(n)=my(d=digits(n, 3), c=1); while(c, if(d[1]==2, d=concat(0, d)); c=0; for(i=2, #d, if(d[i]==2, d[i]=-1; d[i-1]+=1; c=1))); d
a(n)=vecsum(bt(n)) \\ Charles R Greathouse IV, May 07 2020
CROSSREFS
KEYWORD
AUTHOR
Marc LeBrun, Oct 31 2001
STATUS
approved