Python,计算阶乘中的尾随零
Python, count the trailing zeros within a factorial
我正在尝试计算阶乘中尾随零的数量。
def count(x):
zeros = 0
for i in range (2,x+1):
print(i)
if x > 0:
if i % 5 == 0:
print("count")
zeros +=1
else:
("False")
print(zeros)
count(30)
我认为尾随零的数量不正确。
当使用 count(30)
时,30 个中有 7 个尾随 0
。但是它返回 6。
你的算法有问题:
import math
def count_zeroes(x):
zeroes = 0
if x <= 0:
return zeroes
for i in range(5, x+1, 5):
for base in range(int(math.log(i, 5)), 0, -1):
if i % pow(5, base) == 0:
zeroes += base
break
return zeroes
维基百科有一个关于这个特定主题的 short article,它说这可以通过计算因子 5 的直接求和来计算。
def trailing_zeros_of_factorial(n):
assert n >= 0, n
zeros = 0
q = n
while q:
q //= 5
zeros += q
return zeros
# 32! = 263130836933693530167218012160000000
print(trailing_zeros_of_factorial(32)) # => 7
def count (x):
i = 5
zeros = 0
while x >= i:
zeros += x // i
i *= 5
return zeros
print(count(30))
我们首先计算 1 到 n(即 X)之间 5 的倍数的个数,然后是 25(~s)的倍数,然后是 125,依此类推。
要计算 n 中 mare 的倍数,我们可以将 n 除以 m
def countFactZeros(num):
count = 0
i = 5
if num < 0:
return False
while num//i > 0:
count = count + num//i
i = i * 5
return count
countFactZeros(10) # output should be 2
countFactZeros(100) # output should be 24
我正在尝试计算阶乘中尾随零的数量。
def count(x):
zeros = 0
for i in range (2,x+1):
print(i)
if x > 0:
if i % 5 == 0:
print("count")
zeros +=1
else:
("False")
print(zeros)
count(30)
我认为尾随零的数量不正确。
当使用 count(30)
时,30 个中有 7 个尾随 0
。但是它返回 6。
你的算法有问题:
import math
def count_zeroes(x):
zeroes = 0
if x <= 0:
return zeroes
for i in range(5, x+1, 5):
for base in range(int(math.log(i, 5)), 0, -1):
if i % pow(5, base) == 0:
zeroes += base
break
return zeroes
维基百科有一个关于这个特定主题的 short article,它说这可以通过计算因子 5 的直接求和来计算。
def trailing_zeros_of_factorial(n):
assert n >= 0, n
zeros = 0
q = n
while q:
q //= 5
zeros += q
return zeros
# 32! = 263130836933693530167218012160000000
print(trailing_zeros_of_factorial(32)) # => 7
def count (x):
i = 5
zeros = 0
while x >= i:
zeros += x // i
i *= 5
return zeros
print(count(30))
我们首先计算 1 到 n(即 X)之间 5 的倍数的个数,然后是 25(~s)的倍数,然后是 125,依此类推。 要计算 n 中 mare 的倍数,我们可以将 n 除以 m
def countFactZeros(num):
count = 0
i = 5
if num < 0:
return False
while num//i > 0:
count = count + num//i
i = i * 5
return count
countFactZeros(10) # output should be 2
countFactZeros(100) # output should be 24