广东工业大学 新生赛 BProblem B: Zhazhahe究竟有多二

Problem B: Zhazhahe究竟有多二

Description

Zhazhahe竟然能二到把耳机扔到洗衣机里去洗,真的是二到了一种程度,现在我们需要判断一下zhazhahe二的程度(就是计算zhazhahe的脑残值有几个2的因子),下面给你一个nn!表示zhazhahe的脑残值。

Input

输入一个正整数t(0<t<3000)表示样例组数,每组样例输入一个正整数n(0<n<1e18)n!表示zhazhahe的脑残值

Output

输出一个正整数表示zhazhahe二的程度

Sample Input

3
2
4
1
5

Sample Output

1
3
1
1

即计算N的阶乘的中有几个2 的因子

如8有 2*2*2  有3个2的因子

首先我们要算n的阶乘;  好吧  你想到这 恭喜你  你要超时

那怎么办?

我只好告诉你  数学方法优化····

直接搞数学方法计算;

如   n=10 时   

n!=1*2*3*4*5*6*7*8*9*10;

那么其实有2的因子的只有  2  4  6  8 10 

其实我也可以写成 

n!=1*(1*2)*3*(2*2)*5*(2*3)*7*(2*4)*9*(2*5)

那么我其实找阶乘中偶数就行了   10有5个偶数(奇数直接忽略掉(不是2的倍数))

偶数有5个

然后 仔细观察  有些是 不止有一个2 的因子  如(2*2)  还有)(2*4)

回过来看  那5个有2的因子的数经过我一顿乱搞  (2的因子都提出来)

由(1*2)*(2*2)*(2*3)*(2*4)*(2*5)

变成了   1*2*3*4*5    (奇数与结果无关 ,不用看)

那么我接着还能提

变成  1*(1*2)*3*(2*2)*5

还是2的倍数有2的因子

那我还找有几个2的倍数的数  再除以2

有2个    此时2的因子总数有   5 + 2个了

现在又变成  1*(1.*2)

同理

总数为5+2+1


下面代码招呼

#include<stdio.h>
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        long long n,num=0;
        scanf("%lld",&n);
        while(n)
        {
            num=num+(n/2);
            n=n/2;
        }
        printf("%lld\n",num);
    }
}

代码很短吧···真的 别说学数学没用了,那毕竟是启发思维的,数学学好了 人聪明,想事情能从多方面考虑,还考虑的周全


好了 我默默去学数学了


警醒以后的自己


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值