zoukankan      html  css  js  c++  java
  • 【bzoj3000】Big Number 【斯特林公式】

    题意:给你两个整数N和K,要求你输出N!的K进制的位数。
    题解:首先补了一下对数的运算法则。
    1.loga(mn)=loga(m)+loga(n)
    2.loga(mn)=loga(m)loga(n)
    3.loga(mn)=nloga(m)
    4.loga(mn)=1nloga(m)
    再有一个n!的近似值公式,就是斯特林公式。
    n!2πn(ne)n
    于是我们就可以求答案了。
    ans=logk(n!)+1
    =>ans=logk(2πn(ne)n)+1
    =>ans=logk(2πn)+logk((ne)n)+1
    =>ans=12logk(2πn)+nlogk(ne)+1
    注意当n比较小的时候结果误差较大,可以直接暴力计算。
    代码

    #include<cstdio>
    #include<cmath>
    using namespace std;
    typedef long long ll;
    const double pi=acos(-1),e=exp(1);
    ll n,k;
    double ans;
    int main(){
        while(~scanf("%lld%lld",&n,&k)){
            if(n<=10000){
                ans=1;
                for(int i=1;i<=n;i++){
                    ans=ans+log(i)/log(k);
                }
                printf("%lld
    ",(ll)ans);
            }else{
                ans=0.5*log(2*pi*n)/log(k)+n*log(n/e)/log(k)+1;
                printf("%lld
    ",(ll)ans);
            }
        }
        return 0;
    }
  • 相关阅读:
    Something about the "BSTR" and "SysStringLen"
    关于 i = i ++ 的问题
    duilib写个三国杀?
    关于WM_GETTEXT的应用
    hoops暂时用过的一些方法
    Hoops随便记的
    C++ win32线程数上限
    windows系统时间(SYSTEMTIME)
    Form表单提交的那些事
    多行文字溢出...
  • 原文地址:https://www.cnblogs.com/2016gdgzoi471/p/9476874.html
Copyright © 2011-2022 走看看