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;
            }
        }
    }
    
  • 相关阅读:
    这个是我得标题:1548669163
    Mahout学习
    MySQL
    Ubuntu
    java小程序100例
    java实现链表从尾部输出
    空格替换
    java 实现二维数组查找
    JAVA实现分页
    java 程序参数详解
  • 原文地址:https://www.cnblogs.com/Xiao-yan/p/14110652.html
Copyright © 2011-2022 走看看