量化面試綠皮書:7. 100的階乘中有多少個尾隨零

文中內容僅限技術學習與代碼實踐參考,市場存在不確定性,技術分析需謹慎驗證,不構成任何投資建議。

7. 100的階乘中有多少個尾隨零

Q: 100 ! 100! 100!(100 的階乘)中有多少個尾隨零?

A: 100 ! 100! 100!(100 的階乘)的尾隨零數量取決于因子中 10 的個數,而 10 由質因子 2 和 5 相乘得到。在階乘中,2 的因子通常比 5 的因子多,因此尾隨零的數量主要由 5 的因子數量決定。

計算 100 ! 100! 100! 中 5 的因子數量,可以使用公式:

∑ k = 1 ∞ ? n 5 k ? \sum_{k=1}^{\infty} \left\lfloor \frac{n}{5^k} \right\rfloor k=1??5kn??

其中 n = 100 n = 100 n=100

  • ? 100 5 ? = ? 20 ? = 20 \left\lfloor \frac{100}{5} \right\rfloor = \left\lfloor 20 \right\rfloor = 20 ?5100??=?20?=20(貢獻一個 5 因子的數:5, 10, 15, …, 100,共 20 個)
  • ? 100 25 ? = ? 4 ? = 4 \left\lfloor \frac{100}{25} \right\rfloor = \left\lfloor 4 \right\rfloor = 4 ?25100??=?4?=4(貢獻額外 5 因子的數:25, 50, 75, 100,共 4 個)
  • ? 100 125 ? = ? 0.8 ? = 0 \left\lfloor \frac{100}{125} \right\rfloor = \left\lfloor 0.8 \right\rfloor = 0 ?125100??=?0.8?=0(125 > 100,無貢獻)

因此,總 5 的因子數量為 20 + 4 = 24 20 + 4 = 24 20+4=24

由于 100 ! 100! 100! 中 2 的因子數量(計算為 97 個)遠多于 5 的因子,尾隨零的數量等于 5 的因子數量,即 24 個

驗證:例如,10! = 3,628,800,有 2 個尾隨零(公式計算: ? 10 5 ? = 2 \left\lfloor \frac{10}{5} \right\rfloor = 2 ?510??=2);25! 有 6 個尾隨零(公式計算: ? 25 5 ? + ? 25 25 ? = 5 + 1 = 6 \left\lfloor \frac{25}{5} \right\rfloor + \left\lfloor \frac{25}{25} \right\rfloor = 5 + 1 = 6 ?525??+?2525??=5+1=6),公式可靠。

100 ! 100! 100! 中有 24 個尾隨零

Python 實現

要計算階乘中尾隨零的數量,關鍵在于統計質因數5的出現次數(因為2的數量總是多于5)。

def count_trailing_zeros(n: int) -> int:"""計算階乘結果中的尾隨零數量。尾隨零的數量由質因數分解中因子5的個數決定(因為因子2的數量總是更充裕)。通過累加 n//5 + n//25 + n//125 + ... 直到商為零。Args:n: 需要計算階乘尾隨零的正整數Returns:階乘結果末尾連續零的數量Raises:ValueError: 當輸入為負數時拋出"""if n < 0:raise ValueError("Input must be non-negative integer")count = 0divisor = 5while n >= divisor:count += n // divisordivisor *= 5return count# 驗證100!的尾隨零數量
print(count_trailing_zeros(100))  # 輸出: 24

關鍵點說明

  1. 算法原理

    • 每個尾隨零來自一個10的因子(即 2 × 5 2×5 2×5
    • 階乘中因子2的數量始終多于5,因此只需統計5的因子數
    • 通過連續除以5的冪次(5, 25, 125…)累加商值
  2. 風格要素

    • 強類型標注:參數和返回值類型明確(: int / -> int
    • 文檔字符串:包含功能說明、參數、返回值和異常
    • 輸入驗證:對負數輸入拋出ValueError
  3. 時間復雜度 O ( log ? n ) O(\log_n) O(logn?),對于 n = 100 n=100 n=100 僅需4次循環迭代:

    • 100//5 = 20
    • 100//25 = 4
    • 100//125 = 0 → 終止

這道面試題的本質是考察候選人將復雜問題分解為可量化因子的能力高效計算思維,這類能力直接對應量化金融中高頻交易系統優化、風險管理模型構建、衍生品定價精度提升等核心挑戰。

🔑 核心知識點

  1. 質因數分解
    理解尾隨零由因子 2 × 5 2×5 2×5 構成,且 5 的數量為瓶頸因子
  2. 算法復雜度優化
    O ( log ? n ) O(\log_n) O(logn?) 迭代代替階乘計算(避免 100 ! 100! 100! 的爆炸性計算)
  3. 邊界條件處理
    對負數/零輸入的異常控制(映射金融數據清洗場景)

📊 面試評估維度

考察維度具體表現要求本題對應點
數學建模能力將現實問題轉化為數學約束識別尾隨零與質因數 5 的關聯
計算效率敏感度避免暴力計算,設計最優算法用除法累加代替階乘運算
代碼嚴謹性邊界條件處理與防御性編程對負輸入拋出 ValueError
金融思維聯想理解數學工具在金融場景的應用邏輯類似因子分解在波動率建模中的應用

🧩 典型回答框架

def count_trailing_zeros(n: int) -> int:# 1. 輸入驗證(金融數據校驗思維)if n < 0: raise ValueError("n must be non-negative")# 2. 核心算法(量化計算效率)count = 0while n >= 5:n //= 5  # 關鍵迭代步驟count += nreturn count

金融場景延伸解釋:類似因子分解邏輯可用于信用風險模型,如:

  • 將違約概率分解為宏觀因子暴露(相當于質因數 5
  • 公司特質風險(相當于冗余因子 2

💡 核心洞察

該問題暗含量化金融兩大核心能力:

  1. 風險因子剝離能力
    如同分離階乘中的 5 因子,金融建模需識別關鍵驅動變量(如利率變動對衍生品價格的敏感度)
  2. 高維計算優化思維
    避免直接計算 100 ! 100! 100! 映射金融中的蒙特卡洛模擬優化——通過方差縮減技術降低計算量

在期權定價中,類似算法用于高效計算路徑依賴型產品的支付函數(如亞式期權),體現用數學洞察替代暴力計算的量化內核。

風險提示與免責聲明
本文內容基于公開信息研究整理,不構成任何形式的投資建議。歷史表現不應作為未來收益保證,市場存在不可預見的波動風險。投資者需結合自身財務狀況及風險承受能力獨立決策,并自行承擔交易結果。作者及發布方不對任何依據本文操作導致的損失承擔法律責任。市場有風險,投資須謹慎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83000.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83000.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83000.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java 常用 API 分類總結(算法競賽考前速記篇)- 適用于算法競賽(如 CCF CSP、藍橋杯、NOI)

以下是Java 常用 API 的系統性總結&#xff0c;特別適用于算法競賽&#xff08;如 CCF CSP、藍橋杯、NOI&#xff09;場景。按照功能分類&#xff0c;并給出代表性方法及簡要用法說明&#xff0c;方便復習與帶入考場&#xff1a; ? Java 常用 API 分類總結&#xff08;算法競賽…

重復文件管理 一鍵清理重復 圖片 文檔 免費 超輕量無廣告

各位電腦小衛士們&#xff01;今天給你們介紹一款超厲害的軟件——ZZYDupFile&#xff0c;它是專門搞重復文件管理的輕量級工具&#xff0c;能幫咱快速找到并清理電腦里的重復文件。接下來我就詳細說說它的那些優點。 軟件下載地址安裝包 首先說說它的核心功能。它查重有好幾…

本地部署企業郵箱,讓企業辦公更安全高效

在當今數字化辦公時代&#xff0c;企業郵箱作為企業溝通協作的重要工具&#xff0c;承載著企業業務往來和辦公協同的重要職能。基于安全性、個性化需求、系統集成等方面的考量&#xff0c;越來越多的企業傾向于選擇本地部署企業郵箱&#xff0c;本地化部署不僅能夠有效守護企業…

基于深度強化學習的智能機器人導航系統

前言 隨著人工智能技術的飛速發展&#xff0c;機器人在日常生活和工業生產中的應用越來越廣泛。其中&#xff0c;機器人導航技術是實現機器人自主移動的關鍵。傳統的導航方法依賴于預設的地圖和路徑規劃算法&#xff0c;但在復雜的動態環境中&#xff0c;這些方法往往難以適應。…

gorm 配置數據庫

介紹 GORM 是 Go 語言中最流行的 ORM&#xff08;對象關系映射&#xff09;庫之一&#xff0c;基于數據庫操作的封裝&#xff0c;提供類似 Django ORM / SQLAlchemy 的開發體驗。 特性描述支持多種數據庫MySQL、PostgreSQL、SQLite、SQL Server、ClickHouse 等自動遷移自動根…

k8s4部署

configMap configmap概述&#xff1a;數據會存儲在etcd數據庫&#xff0c;其應用場景主要在應用程序的配置 configmap支持的類型&#xff08;1&#xff09;鍵值對&#xff08;2&#xff09;多行數據 pod使用configmap資源有兩種常見的方式&#xff08;1&#xff09;變量注入&a…

2025HNCTF - Crypto

Crypto lcgp 題目&#xff1a; from Crypto.Util.number import * import gmpy2 import random n getPrime(1024) flag bH&NCTF{ str(uuid.uuid4()).encode() b} flagbytes_to_long(flag) e 2024 cpow(e, flag, n)class LCG:def __init__(self, seed, a, b, m):sel…

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在離線機器上運行軟件&#xff0c;所以得把軟件用docker打包起來&#xff0c;大部分功能都沒問題&#xff0c;出了一個奇怪的事情。同樣的代碼&#xff0c;在本機上用vscode可以運行起來&#xff0c;但是打包之后在docker里出現了問題。使用的是dialog組件&#xff0c;…

前后端分離開發 和 前端工程化

來源&#xff1a;黑馬程序員JavaWeb開發教程&#xff0c;實現javaweb企業開發全流程&#xff08;涵蓋SpringMyBatisSpringMVCSpringBoot等&#xff09;_嗶哩嗶哩_bilibili 前后端混合開發&#xff1a; 需要使用前端的技術棧開發前端的功能&#xff0c;又需要使用Java的技術棧…

QT線程同步 QReadWriteLock并發訪問

QT多線程專欄共有17篇文章,從初識線程到、QMutex鎖、QSemaphore信號量、Emit、Sgnals、Slot主線程子線程互相傳值同步變量、QWaitCondition、QReadWriteLock、事件循環、QObjects、線程安全、線程同步、線程異步、QThreadPool線程池、ObjectThread多線程操作、 moveToThread等…

【物聯網-ModBus-RTU

物聯網-ModBus-RTU ■ 優秀博主鏈接■ ModBus-RTU介紹■&#xff08;1&#xff09;幀結構■&#xff08;2&#xff09;查詢功能碼 0x03■&#xff08;3&#xff09;修改單個寄存器功能碼 0x06■&#xff08;4&#xff09;Modbus RTU 串口收發數據分析 ■ 優秀博主鏈接 Modbus …

03.數據類型

數據類型 數據長什么樣數據需要多少空間來存放系統內置數據類型用戶定義數據類型 選擇正確的數據類型對于獲得高性能至關重要 三大原則: 更小的通常更好&#xff0c;盡量使用可正確存儲數據的最小數據類型簡單就好&#xff0c;簡單數據類型的操作通常需要更少的CPU周期盡量…

達夢數據庫字段類型 varchar 轉 text

達夢數據庫字段類型 varchar 轉 text 業務場景問題浮現問題處理方式一 總結 業務場景 在初次創建達夢數據庫表的時候&#xff0c;僅僅設定了基礎的表字段。然而&#xff0c;在預估字段值的長度時&#xff0c;常常會出現不夠準確的情況。例如&#xff0c;我創建了一張參數配置表…

MyBatis 緩存機制源碼深度解析:一級緩存與二級緩存

MyBatis 緩存機制源碼深度解析&#xff1a;一級緩存與二級緩存 一、一級緩存1.1 邏輯位置與核心源碼解析1.2 一級緩存容器&#xff1a;PerpetualCache1.3 createCacheKey 方法與緩存命中1.4 命中與失效時機1.5 使用方式 二、二級緩存2.1 邏輯位置與核心源碼解析2.2 查詢流程、命…

【題解-Acwing】1097. 池塘計數

題目&#xff1a;1097. 池塘計數 題目描述 農夫約翰有一片 N?M 的矩形土地。 最近&#xff0c;由于降雨的原因&#xff0c;部分土地被水淹沒了。 現在用一個字符矩陣來表示他的土地。 每個單元格內&#xff0c;如果包含雨水&#xff0c;則用”W”表示&#xff0c;如果不含…

基于Flask框架的前后端分離項目開發流程是怎樣的?

基于Flask框架的前后端分離項目開發流程可分為需求分析、架構設計、并行開發、集成測試和部署上線五個階段。以下是詳細步驟和技術要點&#xff1a; 一、需求分析與規劃 1. 明確項目邊界 功能范圍&#xff1a;確定核心功能&#xff08;如用戶認證、數據管理、支付流程&#…

板凳-------Mysql cookbook學習 (十--2)

5.12 模式匹配中的大小寫問題 mysql> use cookbook Database changed mysql> select a like A, a regexp A; ------------------------------ | a like A | a regexp A | ------------------------------ | 1 | 1 | --------------------------…

編程實驗篇--線性探測哈希表

線性探測哈希表性能測試實驗報告 1. 實驗目的 編程實現線性探測哈希表。編程測試線性探測哈希表。了解線性探測哈希表的性能特征&#xff0c;并運行程序進行驗證。 2. 實驗背景與理論基礎 哈希表是一種高效的數據結構&#xff0c;用于實現符號表&#xff08;Symbol Table&a…

使用Python提取PDF元數據的完整指南

PDF文檔中包含著豐富的元數據信息&#xff0c;這些信息對文檔管理和數據分析具有重要意義。本文將詳細介紹如何利用Python高效提取PDF元數據&#xff0c;并對比主流技術方案的優劣。 ## 一、PDF元數據概述 PDF元數據&#xff08;Metadata&#xff09;是包含在文檔中的結構化信…

【量化】策略交易類型

通過查找相關資料&#xff0c;這里羅列了一些常見的策略交易類型&#xff0c;如下&#xff1a; &#x1f4ca; 技術分析類策略 均線交叉策略&#xff08;SMA、EMA&#xff09;動量策略&#xff08;Momentum&#xff09;相對強弱指數策略&#xff08;RSI&#xff09;隨機指標策…