login
Run Length Transform of factorials.
16

%I #54 Apr 06 2020 09:57:24

%S 1,1,1,2,1,1,2,6,1,1,1,2,2,2,6,24,1,1,1,2,1,1,2,6,2,2,2,4,6,6,24,120,

%T 1,1,1,2,1,1,2,6,1,1,1,2,2,2,6,24,2,2,2,4,2,2,4,12,6,6,6,12,24,24,120,

%U 720,1,1,1,2,1,1,2,6,1,1,1,2,2,2,6,24,1,1,1

%N Run Length Transform of factorials.

%C For the definition of the Run Length Transform see A246595.

%C Only Jordan-Polya numbers (A001013) are terms of this sequence.

%H Antti Karttunen, <a href="/A246660/b246660.txt">Table of n, a(n) for n = 0..8192</a>

%H <a href="/index/Ru#rlt">Index entries for sequences computed with run length transform</a>

%F a(2^n-1) = n!.

%F a(0) = 1, a(2n) = a(n), a(2n+1) = a(n) * A007814(2n+2). - _Antti Karttunen_, Sep 08 2014

%F a(n) = A112624(A005940(1+n)). - _Antti Karttunen_, May 29 2017

%F a(n) = A323505(n) / A323506(n). - _Antti Karttunen_, Jan 17 2019

%t Table[Times @@ (Length[#]!&) /@ Select[Split[IntegerDigits[n, 2]], #[[1]] == 1&], {n, 0, 83}] (* _Jean-François Alcover_, Jul 11 2017 *)

%o (Sage)

%o def RLT(f, size):

%o L = lambda n: [a for a in Integer(n).binary().split('0') if a != '']

%o return [mul([f(len(d)) for d in L(n)]) for n in range(size)]

%o A246660_list = lambda len: RLT(factorial, len)

%o A246660_list(88)

%o (PARI)

%o A246660(n) = { my(i=0, p=1); while(n>0, if(n%2, i++; p = p * i, i = 0); n = n\2); p; };

%o for(n=0, 8192, write("b246660.txt", n, " ", A246660(n)));

%o \\ _Antti Karttunen_, Sep 08 2014

%o (Scheme)

%o ;; A stand-alone loop version, like the Pari-program above:

%o (define (A246660 n) (let loop ((n n) (i 0) (p 1)) (cond ((zero? n) p) ((odd? n) (loop (/ (- n 1) 2) (+ i 1) (* p (+ 1 i)))) (else (loop (/ n 2) 0 p)))))

%o ;; One based on given recurrence, utilizing memoizing definec-macro from my IntSeq-library:

%o (definec (A246660 n) (cond ((zero? n) 1) ((even? n) (A246660 (/ n 2))) (else (* (A007814 (+ n 1)) (A246660 (/ (- n 1) 2))))))

%o ;; Yet another implementation, using fold:

%o (define (A246660 n) (fold-left (lambda (a r) (* a (A000142 r))) 1 (bisect (reverse (binexp->runcount1list n)) (- 1 (modulo n 2)))))

%o (definec (A000142 n) (if (zero? n) 1 (* n (A000142 (- n 1)))))

%o ;; Other functions are as in A227349 - _Antti Karttunen_, Sep 08 2014

%o (Python)

%o from operator import mul

%o from functools import reduce

%o from re import split

%o from math import factorial

%o def A246660(n):

%o return reduce(mul,(factorial(len(d)) for d in split('0+',bin(n)[2:]) if d)) if n > 0 else 1 # _Chai Wah Wu_, Sep 09 2014

%Y Cf. A000142, A001013, A007814, A112624, A323505, A323506.

%Y Cf. A003714 (gives the positions of ones).

%Y Run Length Transforms of other sequences: A001316, A071053, A227349, A246588, A246595, A246596, A246661, A246674.

%K nonn,base

%O 0,4

%A _Peter Luschny_, Sep 07 2014