zoukankan      html  css  js  c++  java
  • 刷刷刷

    数学刷刷刷

    1.Digits of Factorial

    题意大体是给一个(1e6)大小的(n)然后问其(n!)(k)进制位数。

    我感觉遇到阶乘,虽然不是经验主义,但是求位数大致应该是和(log_{10})有关的,所以我们先设所求答案为(x),那么显然可得$$n!<=k^{x}$$然后很显然,(n!)必然无法处理,那么又很显然,这两端都是许多个数相乘,重点在于他们相乘的数量多,那么我么们等式两边同时取(log_{10})

    [lg n!<=lg k^{x} ]

    [lg1 + lg2+lg3+···+lg n <= x imes lg k ]

    [frac{(lg1 + lg2+···+lg n)}{lg k}<=x ]

    解得(x)

    代码

    #include <iostream>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    typedef long long ll;
    const ll N = 1e6 + 9;
    double sum[N];
    int main() 
    {
        ll a, b, L;
        int cas = 0;
        int t;
        cin >> t;
        for (int i = 1; i <= 1e6; i++) {
            sum[i] = sum[i-1] + log(i);
        }
        while (t--) {
            int n;cin >> n;
            int base;cin >> base;
            cout << "Case " << ++cas << ": ";
            if (n == 0)cout << 1 << endl;
            else {
                cout << (int)(sum[n]/log(base)) + 1 << endl;
            }
        }
    }
    
  • 相关阅读:
    P1182 数列分段`Section II` 二分
    洛谷 P1025 数的划分
    深浅拷贝
    数据的内置方法
    控制流程-if/while/for
    python的基本运算符
    花式赋值
    python的注释
    Python的垃圾回收机制
    变量与常量
  • 原文地址:https://www.cnblogs.com/Xiao-yan/p/14110652.html
Copyright © 2011-2022 走看看