OFFSET
1,1
COMMENTS
b(n) positive monotonic sequence is the Aronson transform of a(n) positive monotonic sequence if every member of a(n) satisfies the condition: "k is in b if and only if b(k) is in a", so that k must be the least such number.
LINKS
B. Cloitre, N. J. A. Sloane and M. J. Vandermast, Numerical analogues of Aronson's sequence, J. Integer Seqs., Vol. 6 (2003), #03.2.2.
B. Cloitre, N. J. A. Sloane and M. J. Vandermast, Numerical analogues of Aronson's sequence, arXiv:math/0305308 [math.NT], 2003.
PROG
(PARI) {arons(v)= /* Returns the Aronson transform of v */ local(x=[], pv=1, px=1, n=1, i=0, k, l); l=matsize(v)[2];
/*The initial terms: */ if(n<v[pv], n+=1; while(n==v[pv], n+=1; pv+=1); x=concat (x, n); n+=1; i+=1, while((n<l)&&(v[pv]==n), x=concat (x, n); n+=1; pv+=1; i+=1));
/*The induction:*/ while(abs(pv)<=l&&n<v[l], k=x[i]; n=k; pv=isin(i+1, v, l, pv);
/* pv>0 if (i+1) is in v */ if(k==i, n+=1; if(pv<0, pv=abs(pv); while(pv>0, n+=1; pv=isin (n, v, l, pv))), px=isin(i+1, x, i, px); if(px>0, pv=-abs(pv); while (pv<0, n+=1; pv=isin(n, v, l, pv)), pv=abs(pv); while(pv>0, n+=1; pv=isin(n, v, l, pv)))); x=concat(x, n); i+=1); /*print(i); */ return(x) }
{isin(x, v, l, poi)= /*If x integer is in v monotonic vector of length l, the function returns a positive 'poi', else a negative one. (poi is pointer, used for acceleration. The last returned value is recommended in the input) */
poi=abs(poi); if(poi==1&&x<v[1], return(-poi), if(x<v[poi], while(x<v[poi]&&poi>1, poi-=1); if(x<>v [poi], poi*=-1), if(x>v[poi], while(x>v[poi]&&poi<l, poi+=1); if(x<>v [poi], poi*=-1))); return(poi))}
CROSSREFS
KEYWORD
easy,nonn
AUTHOR
Ferenc Adorjan (fadorjan(AT)freemail.hu)
STATUS
approved