我们如何找到阶乘零的大O表示法?

时间:2018-06-24 21:28:37

标签: c++ algorithm recursion big-o factorial

我知道如何计算阶乘的大O表示法,但是我很难将两种表示法组合在一起。 这是用于计算尾随零的代码。

using namespace std;

  // Function to return trailing 
  // 0s in factorial of n
 int findTrailingZeros(int n)
 {
   // Initialize result
    int count = 0;

    // Keep dividing n by powers of 
    // 5 and update count
    for (int i = 5; n / i >= 1; i *= 5)
        count += n / i;

    return count;
}

// Driver Code
int main()
{
   int n = 100;
   cout << "Count of trailing 0s in " << 100
        << "! is " << findTrailingZeros(n);
   return 0;
}

3 个答案:

答案 0 :(得分:1)

复杂度为O(log(n))。很容易看出是否绘制了每个n的迭代次数:

n        iterations
------   -----------
< 5      0
< 25     1
< 125    2
< 625    3
< 3125   4

答案 1 :(得分:0)

准确地说,应该是 O(1-log5(n))= O(log5(n))其中n是要确定阶乘的数字。

答案 2 :(得分:-1)

5,5^2,5^3....5^k。 最后 5^k<=n(在 for 循环中给出) 所以 k<=log5(n) 所以时间复杂度是 thetha(logn)