Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 为什么阶乘数的结尾有太多的零位数_Math_Numbers - Fatal编程技术网

Math 为什么阶乘数的结尾有太多的零位数

Math 为什么阶乘数的结尾有太多的零位数,math,numbers,Math,Numbers,我有一个有趣的问题,不是关于编程,也许是关于数学 这是关于Scala-阶乘数的简单代码 def smartFactorial(number: Int): BigInt = { def factorial(number: Int, accumulator: BigInt) : BigInt = { if (number <= 1) accumulator else factorial(number - 1, number * accumulator) }

我有一个有趣的问题,不是关于编程,也许是关于数学

这是关于Scala-阶乘数的简单代码

def smartFactorial(number: Int): BigInt = {
  def factorial(number: Int, accumulator: BigInt) : BigInt = {
    if (number <= 1) accumulator
    else
      factorial(number - 1, number * accumulator)
  }

  factorial(number, 1)
}
println(smartFactorial(1000))
def smartFactorial(编号:Int):BigInt={
def阶乘(数:Int,累加器:BigInt):BigInt={

if(number大阶乘有很多尾随零,主要原因有两个

  • 它们由许多以零结尾的数字组成。想想所有的数字,比如10,20,30等等,你乘以1000的阶乘就得到了答案。每一个数字加上一个0(两个0代表100,200等等),因为任何数字乘以10都会以0结尾

  • 它们也由许多2或5的倍数组成。因为2*5=10,所以对于展开式中的每一个2和5的倍数,可以在阶乘的末尾加一个零


在任何阶乘中都有大量的2可用,因此每5个阶乘都会添加一个尾随的0。但是,5的高次幂的倍数(例如25,50,…)给你更多的尾随0。这是你注意到的:20!到24!有4个尾随0,但25!有6个尾随0,因为25是5*5,这增加了两个尾随0。

好的,非常感谢!我认为很容易确定尾随的0(乘以10、20等),那么没有5个零位数的数字呢?@AlmazMurzabekov!因为24!有四个尾随的0,当你将其乘以25,你会得到两个(因为25是5*5,这两个5都与偶数配对,加上尾随的0).您应该会看到类似的情况发生在125处。n!中约有n个因子2和n/4个因子5,因此,n/4个尾随零的数量相同。
  def countOfEndZeros(number: String): Int = {
    def countOfEndZeros(number: String, index: Int, accumulator: Int) : Int = {
      if (number.charAt(index) != '0') accumulator
      else if (index - 1 < 0) accumulator
      else countOfEndZeros(number.substring(0, index), index - 1, accumulator + 1)
    }

    countOfEndZeros(number, number.length - 1, 0)
  }

  val countExamples = 1000
  val inputs: Stream[Int] = Stream.from(1)

  inputs
    .map(i => (i, factorial(i).toString()))
    .map(t => (t._1, countOfEndZeros(t._2)))
    .take(countExamples)
    .foreach(println)