问题1:求 N!末尾有多少个0。

问题2:N!中二进制表示中最低位1的位置。

首先对于问题1:

    对于N!的末尾有多少个0这个问题。要追溯到算术基本定理:

算术基本定理:

任何一个大于1的自然数N,都可以唯一分解成有限个质数的乘积 N=(P_1^a1)*(P_2^a2)......(P_n^an) , 这里P_1<P_2<...<P_n是质数,其诸方幂 ai 是正整数。
 
以上是百度百科对于该定理的描述。由此我们可以把一个数看做是由有限个素数因子构成的。那么N!也不例外。设N!=M。
M = S*10^n = S*(2*5)*(2*5)*(2*5)...2*5有n队。S尾部是不含0的。所以原问题就转化为寻找N!中有多少对2和5的因子了。
也就是说寻找2和5的个数中哪个最少。取最少的那个(原先描述最少用最小,果断容易引起误解。)。对于这个问题。还有一步可以通过思维化简问题的就是2和5的因子到底哪个更少呢?明显是5的。所以我们要寻找数中5的因子的个数。
 
问题描述:寻找 N!中5的因子的个数。
法1:从数的角度
很常规的解法,将数除以5判断是否能被5除尽。可以的话就计数。循环执行。
int count;
int num = N!;
count = 0;
while(num)
{
    if(num%5==0)
    {
        count ++;
    }
    num /= 5;
}
法1

相关文章:

  • 2021-11-18
  • 2022-02-10
  • 2021-08-14
  • 2021-12-23
  • 2021-10-13
  • 2021-11-13
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-25
  • 2022-01-29
  • 2021-10-20
  • 2021-09-23
  • 2021-06-02
  • 2021-05-17
  • 2021-11-25
相关资源
相似解决方案