您的位置:首页 > 编程语言

编程之美读书笔记-不要被阶乘吓倒

2016-09-04 12:02 281 查看
本文转载自N!含有质因子2的个数
题目:求N!的二进制表示中最低位1的位置。
解析:这个问题实际上等同于求N!含有质因数2的个数,等于[N/2]+[N/4]+[N/8]+[N/16]+…。

#include<iostream>
using namespace std;

int lowestOne(int N)
{
int Ret = 0;
while (N)
{
N >>= 1;
Ret += N;
}
return Ret+1;
}

int main()
{
cout <<lowestOne(6) << endl;
return 0;
}
N!中含有质因数2的个数,还等于N减去N的二进制表示中1的数目。
设N的二进制表示中1的数目为f(x),则易知

。另设g(x)=x,



按照递归函数的思想,所有的可计算函数都是可以表示成递归的,下面将恒等函数用递归的形式表示出来。



上面的递归形式并不是最终的,但这种形式有利于我们的推导,注意这里的除法是整除的意思。最终可以得到下面的式子。



(2)式的最后一项 ,恰好表示x的二进制表示中1的个数。综上,原命题得证。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: