日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文巾解题 793. 阶乘函数后 K 个零

發布時間:2025/4/5 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文巾解题 793. 阶乘函数后 K 个零 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 題目描述

2 解題思路

令 zeta(x) 為 x! 末尾零的個數。如果 x! 可以分解為素數的乘積,如的形式,那么 x! 末尾零的個數為 min(a, b) = b。

zeta(x) 就是 x 除以 5 的次數之和,即 zeta(x) 等于

可以看出,zeta(x) 是一個單調遞增函數,因此可以使用二分查找求解。

使用二分查找找出滿足 zeta(x) = K 的最大 x 和最小 x

由于一定存在 zeta(5a-1) < zeta(5a) = zeta(5a+1) = zeta(5a+2) = zeta(5a+3) = zeta(5a+4) < zeta(5a+5),即如果存在某個 x 使得 zeta(x) = K,那么一定存在連續 5 個數的階乘末尾零的個數都為 K;如果不存在這樣的 x,那么階乘末尾零的個數為 K 的數字只有 0 個。

class Solution(object):def preimageSizeFZF(self, K):def zeta(x):if(x==0):return 0else:return x//5 + zeta(x//5) lo, hi = 4*K, 5*K + 1while lo < hi:mi = (lo + hi) // 2zmi = zeta(mi)if zmi == K: return 5elif zmi < K: lo = mi + 1else: hi = mireturn 0 #最終沒有找到這個數

接下來解釋一下這邊二分查找的時候的左邊界和右邊界是怎么找的:

我們可以得到

即x≥4k

即x≤5k

復雜度分析

時間復雜度:,二分查找的復雜度為 O(log K),其中每一步計算 zeta 的復雜度也為 O(logK)。

空間復雜度:O(logK),zeta 遞歸調用棧的大小。

總結

以上是生活随笔為你收集整理的文巾解题 793. 阶乘函数后 K 个零的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。