• 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;
    }
  • 相关阅读:
    openssl自签发证书
    安装tomcat8 env
    路由信息相关 route 网卡
    安装jdk env
    sublime使用与配置
    docker仓库登录 配置insecure-registries
    harobor私有docker镜像仓库
    git版本回退的两种方式
    git diff命令的使用
    Kali Linux中的自带字典&crunch自建字典
  • 原文地址:https://www.cnblogs.com/Willems/p/12881363.html
Copyright © 2020-2023  润新知