Math 为什么阶乘数的结尾有太多的零位数
我有一个有趣的问题,不是关于编程,也许是关于数学 这是关于Scala-阶乘数的简单代码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) }
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)