计算n!中包含多少个2



Description

平时大家都爱吃零食,但是大家知道吗?这些零食中大多数都是垃圾食品,它对我们身体的危害是很严重的。
最近,赵老师在进教室时常常闻到一股怪味,觉得有同学在吃垃圾食品,老师就开始查,果然,有个同学在吃辣条。于是,赵老师在班上举行了一次讨论会,要大家就“垃圾食品危害健康”这问题发表看法。
讨论会开始了,有的同学介绍了垃圾食品的危害,有的提醒我们不要去买,还有的说了垃圾食品的特点。
GJJ同学对于辣条并不感兴趣。聪明的他遇到了KKK,KKK问了聪明的他一个略显复杂的题目,虽然这个问题对于聪明的他来说问题不大,但是由于聪明的他比较懒,懒得去算,再加上昨晚修仙,今天他只想睡觉。所以,希望大家帮助KKK解决了这个问题,给你n个箱子和n个糖果,每个糖果都是独一无二的,n个箱子有序的摆成一排,箱子编号为1-n,每个箱子只能放一个糖果,然后要求你把n个糖果放进n个箱子中,那么可以得到一共有多少种方案。
显然这个方案数可以被2^M整除(M为一个非负整数),求M最大为多少?

Input

第一行输入一个t(t<=1e5),表示有t组数据
每组数据输入一个n(n为int范围内的正整数)

Output

输出一个整数(int范围内),输出占一行

Sample Input

2
1
100000000

Sample Output

0
99999988

HINT

对于这个题,我忽略了每个箱子一个糖果。
现在他的方法数为n的阶乘,所以就是求n的阶乘包含有多少个2的问题。这又转化为1到n分解质因数之后有多少各个2.
这个代码可以想象为1到n里面的偶数中能有多少个2.n/2就是1到n有多少个偶数,n/2*2表示1到n有多少个4的倍数,然
后再加上n/2*2。
#include<stdio.h>
int main()
{
	int t;
	scanf("%d",&t);
	while(t--){
		int n,sum=0;
		scanf("%d",&n);
		while(n){
			n/=2;
			sum+=n;
		}
		printf("%d\n",sum);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值