OFFSET
0,4
COMMENTS
LINKS
FORMULA
a(2^n-1) = n!.
a(0) = 1, a(2n) = a(n), a(2n+1) = a(n) * A007814(2n+2). - Antti Karttunen, Sep 08 2014
MATHEMATICA
Table[Times @@ (Length[#]!&) /@ Select[Split[IntegerDigits[n, 2]], #[[1]] == 1&], {n, 0, 83}] (* Jean-François Alcover, Jul 11 2017 *)
PROG
(Sage)
def RLT(f, size):
L = lambda n: [a for a in Integer(n).binary().split('0') if a != '']
return [mul([f(len(d)) for d in L(n)]) for n in range(size)]
A246660_list = lambda len: RLT(factorial, len)
A246660_list(88)
(PARI)
A246660(n) = { my(i=0, p=1); while(n>0, if(n%2, i++; p = p * i, i = 0); n = n\2); p; };
for(n=0, 8192, write("b246660.txt", n, " ", A246660(n)));
\\ Antti Karttunen, Sep 08 2014
(Scheme)
;; A stand-alone loop version, like the Pari-program above:
(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)))))
;; One based on given recurrence, utilizing memoizing definec-macro from my IntSeq-library:
(definec (A246660 n) (cond ((zero? n) 1) ((even? n) (A246660 (/ n 2))) (else (* (A007814 (+ n 1)) (A246660 (/ (- n 1) 2))))))
;; Yet another implementation, using fold:
(define (A246660 n) (fold-left (lambda (a r) (* a (A000142 r))) 1 (bisect (reverse (binexp->runcount1list n)) (- 1 (modulo n 2)))))
;; Other functions are as in A227349 - Antti Karttunen, Sep 08 2014
(Python)
from operator import mul
from functools import reduce
from re import split
from math import factorial
def A246660(n):
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
CROSSREFS
KEYWORD
nonn,base
AUTHOR
Peter Luschny, Sep 07 2014
STATUS
approved