zoukankan      html  css  js  c++  java
  • ZOJ 2022 Factorial (数学 思维)

    题目:传送门

    题意

    输入 n (1 <= n <= 1000000000),问 n! 十进制形式末尾有多少个0;

    思路

    一般的思路就是,枚举 1 ~ n 中有多少个质因子 5 和 2,这样子做的复杂度是 o(nlogn)的,显然不行。

    其实,我们只需要知道 1 ~ n 中,总共有多少个质因子 5 就好了,因为 2 肯定比 5 多。

    那我们可以每次提取一个质因子 5,这样 1 ~ n 就变成了 1 ~ n / 5

    那可以递归实现, f(n) = n / 5  + f(n / 5),用循环实现也可以。

    #include <bits/stdc++.h>
    #define LL long long
    #define ULL unsigned long long
    #define UI unsigned int
    #define mem(i, j) memset(i, j, sizeof(i))
    #define rep(i, j, k) for(int i = j; i <= k; i++)
    #define dep(i, j, k) for(int i = k; i >= j; i--)
    #define pb push_back
    #define make make_pair
    #define INF 0x3f3f3f3f
    #define inf LLONG_MAX
    #define PI acos(-1)
    #define fir first
    #define sec second
    #define lb(x) ((x) & (-(x)))
    #define dbg(x) cout<<#x<<" = "<<x<<endl;
    using namespace std;
    
    const int N = 1e6 + 5;
    
    void solve() {
    
        LL n;
    
        scanf("%lld", &n);
    
        LL ans = 0LL;
    
        while(n) {
    
            ans += n / 5;
    
            n /= 5;
    
        }
    
        printf("%lld
    ", ans);
    
    }
    
    int main() {
    
        int _; scanf("%d", &_);
        while(_--) solve();
    
    //    solve();
    
        return 0;
    }
  • 相关阅读:
    BZOJ 4245: [ONTAK2015]OR-XOR
    BZOJ 2535: [Noi2010]Plane 航空管制2
    COGS 2551. 新型武器
    cogs2550. 冰桥,升起来了!
    大数模板
    uva 1513(线段树)
    uva 11525(线段树)
    poj 3368(RMQ模板)
    hdu 4686 Arc of Dream(矩阵快速幂)
    poj 3321 Apple Tree(树状数组)
  • 原文地址:https://www.cnblogs.com/Willems/p/12881363.html
Copyright © 2011-2022 走看看