题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=954
题意:求N!的二进制表示最低位的1的位置(从右向左数)。(N<=1 000 000 000)
分析:一个数乘上一个2就会向右移一位,最低位添上一个0。那么问题就转化为求出N!的因子有多少个2。而n! 的素因子分解中的素数p的指数(幂)为【n/p】+【n/p^2】+【n/p^3】+.......http://blog.csdn.net/w20810/article/details/43270755
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
int main()
{
int n,count;
long long fac;
while(scanf("%d",&n)!=EOF)
{
count=0;
long long t=2;
while(n/t>=1)
{
count+=n/t;
t=t<<1;
}
printf("%d\n",count+1);
}
return 0;
}