众所周知,一个数可以表示成若干个2的某次方相加的形式。
那么如果给定一个数,定义f(x)f(x)f(x)为求该数由几个2的某次方相加。
例如f(6)=2f(6)=2f(6)=2,因为6=22+216=2^{2}+2^{1}6=22+21构成
现在有一个想法,欲求f(a)f(a)f(a),预处理2的若干次方,然后每次二分找到小于aaa的最大数,减去该数,重复上述过程知道a=0a=0a=0。
那么这个方法是最快的方法吗?
以及这个方法的时间复杂度是多少呢?