求N!的二进制表示中最低位1的位置

来源:互联网 发布:库课软件怎么样 编辑:程序博客网 时间:2024/06/01 07:57

判断一个二进制中最后一位是否为0,可以把这个二进制除以2,如果结果为0则把这个数向右移动了一位,否则说明这个数最后一位为1,无法整除2,。


所以这个问题可以变为N!中质因数2个个数,一个二相当于使其向左移动一位,非2的倍数相乘最后一位是1不变,因此只要判断里面质因数2的个数就可以了,其他不用管。



而N!中    1~N中能被2整除的N/2,能被4整除的N/4,能被8整除的N/8…………



所以可以的代码:



int lowestOne(int n){    int ret = 0;    while(n)     {          n >>= 4;          ret +=n;     }     return ret;}


0 0
原创粉丝点击