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 100sont 0, 1, 00, 10, 100. Les non-vides séquences distinctes 1010sont 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 4est 100en 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