Une sous-séquence est une séquence que vous pouvez obtenir d'une autre en supprimant n'importe quelle quantité de caractères. Les non-vides séquences distinctes 100
sont 0
, 1
, 00
, 10
, 100
. Les non-vides séquences distinctes 1010
sont 0
, 1
, 00
, 01
, 10
, 11
, 010
, 100
, 101
, 110
, 1010
.
Écrivez un programme ou une fonction qui, étant donné un entier positif n, renvoie le nombre de sous-séquences distinctes non vides de l'expansion binaire de n .
Exemple: puisque 4
est 100
en binaire, et nous avons vu qu'il avait cinq sous-séquences distinctes non vides ci-dessus, donc f(4) = 5
. À partir de n = 1 , la séquence commence:
1, 3, 2, 5, 6, 5, 3, 7, 10, 11, 9, 8, 9, 7, 4, 9, 14, 17, 15, 16, 19, 17, 12
Cependant, votre programme doit fonctionner pour tout n <2 50 en moins d'une seconde sur n'importe quelle machine moderne. Quelques grands exemples:
f(1099511627775) = 40
f(1099511627776) = 81
f(911188917558917) = 728765543
f(109260951837875) = 447464738
f(43765644099) = 5941674