首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

NYOJ 84 階乘尾部零的個數 - 質因子分解法

     編輯:C++ 入門

問題描述

給定 n,求 n! 末尾連續 0 的個數。多組測試數據。

數學原理

10 = 2 × 5。階乘中質因子 2 的個數遠多於 5,所以尾部 0 的個數取決於質因子 5 的個數(即 min(cnt2, cnt5) = cnt5)。

cnt5 = ⌊n/5⌋ + ⌊n/25⌋ + ⌊n/125⌋ + ...

C 代碼實現

#include 

int main() {
    int t, n;
    scanf("%d", &t);
    while (t-- && scanf("%d", &n)) {
        int cnt5 = 0;
        while (n) {
            n /= 5;
            cnt5 += n;
        }
        printf("%d\n", cnt5);
    }
    return 0;
}

複雜度

  • 時間:O(log₅ n) 每查詢,極快。
  • 空間:O(1)。

注意

原文代碼同時計算了 2 和 5 並取較小值,雖然正確但多此一舉,直接算 5 即可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved