编程之美---求N!的二进制表示中最低位1的位置

问题描述:

求N!的二进制表示中最低位1的位置。例如:给定N=3,N!=6,那么N!的二进制表示(1010)的最低位1在第二位。

问题求解:
这个问题等同于求N!含有质因数2的个数,因为二进制最低位为0代表是偶数,可以被2整除,如果为1则代表是奇数,不能被2整除,其内部也不会包含质因数2,所以质因数2的个数就是二进制表示中最低位1后面的0个数

所以,答案等于N!含有质因数2的个数加1

N!中含有质因数2的个数,等于[N/2]+[N/4]+[N]/8……
([N/K]等于1,2,3,…,N中能被k整除的数的个数)

#include <iostream>
using namespace std;
int lowestOne(int N)
{
    int ret = 0;
    while(N)
    {
        N >>= 1;
        ret += N;
    }
    return ret+1;
}

int main()
{
    int N=3;
    cout << lowestOne(N) << endl;
    return 0;
}

运行结果:

2
    原文作者:爱橙子的OK绷
    原文地址: https://blog.csdn.net/will130/article/details/45971385
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞