login
Decrement by 1 all maximal digits in factorial base representation of n and then shift it one digit right.
14

%I #21 Mar 14 2021 17:09:07

%S 0,0,1,1,1,1,2,2,3,3,3,3,4,4,5,5,5,5,4,4,5,5,5,5,6,6,7,7,7,7,8,8,9,9,

%T 9,9,10,10,11,11,11,11,10,10,11,11,11,11,12,12,13,13,13,13,14,14,15,

%U 15,15,15,16,16,17,17,17,17,16,16,17,17,17,17,18,18,19,19,19,19,20,20,21,21,21,21,22,22,23,23,23,23,22

%N Decrement by 1 all maximal digits in factorial base representation of n and then shift it one digit right.

%C By "maximal digits" are here understood any digit k that occurs in position k, digit-positions numbered from the right and starting from 1. For example in A007623(677) = "53021", the digits "5" and "1" are maximal, because no larger digits will fit into those positions in a well-formed factorial base representation of a natural number.

%H Antti Karttunen, <a href="/A266193/b266193.txt">Table of n, a(n) for n = 0..10080</a>

%H <a href="/index/Fa#facbase">Index entries for sequences related to factorial base representation</a>

%F Other identities. For all n >= 0:

%F a(A153880(n)) = n.

%e n A007623(n) [subtract 1 from max.digits a(n)

%e [in factorial then shift one digit right] [reinterpret

%e base] in decimal]

%e 0 0 -> 0 = 0

%e 1 1 -> 0 = 0

%e 2 10 -> 1 = 1

%e 3 11 -> 1 = 1

%e 4 20 -> 1 = 1

%e 5 21 -> 1 = 1

%e 6 100 -> 10 = 2

%e 7 101 -> 10 = 2

%e 8 110 -> 11 = 3

%e 9 111 -> 11 = 3

%e 10 120 -> 11 = 3

%e 11 121 -> 11 = 3

%e 12 200 -> 20 = 4

%e 13 201 -> 20 = 4

%e 14 210 -> 21 = 5

%e 15 211 -> 21 = 5

%e 16 220 -> 21 = 5

%e 17 221 -> 21 = 5

%e 18 300 -> 20 = 4

%e ...

%e 23 321 -> 21 = 5

%e 119 4321 -> 321 = 23

%o (MIT/GNU Scheme)

%o (define (A266193 n) (let loop ((n n) (z 0) (i 2) (f 0)) (cond ((zero? n) z) (else (let ((d (remainder n i))) (loop (quotient n i) (+ z (* f (- d (if (< d (- i 1)) 0 1)))) (+ 1 i) (if (zero? f) 1 (* f (- i 1)))))))))

%o (Python)

%o from sympy import factorial as f

%o def a007623(n, p=2): return n if n<p else a007623(n//p, p+1)*10 + n%p

%o def a(n):

%o x=str(a007623(n))[::-1]

%o y="".join(str(i) if i + 1==int(x[i]) else x[i] for i in range(len(x)))[1:]

%o return 0 if n==0 else sum(int(y[i])*f(i + 1) for i in range(len(y)))

%o print([a(n) for n in range(101)]) # _Indranil Ghosh_, Jun 24 2017

%Y Cf. A007623, A257684, A266123.

%Y Left inverse of A153880.

%K nonn,base

%O 0,7

%A _Antti Karttunen_, Dec 23 2015