程式設計之美---求N!的二進位制表示中最低位1的位置
阿新 • • 發佈:2019-02-18
問題描述:
求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