zoukankan      html  css  js  c++  java
  • bzoj3000 Big Number

    Description

    给你两个整数N和K,要求你输出N!的K进制的位数。

    Input

    有多组输入数据,每组输入数据各一行,每行两个数——N,K

    Output

           每行一个数为输出结果。

    Sample Input

    2 5

    2 10

    10 10

    100 200



    Sample Output

    1

    1

    7

    69




    对于100%的数据,有2≤N≤2^31, 2≤K≤200,数据组数T≤200。

    唉神数论啊

    用到一个Stirling公式


    然后各种乱搞推公式啦T T

    orz神犇们

    #include<cstdio>
    #include<cmath>
    using namespace std;
    const long double pi=acos(-1.0),e=exp(1),eps=1e-10;
    long double log(long double a,long double b){return log(a)/log(b);}
    int n,k;
    int main()
    {
    	while (scanf("%d%d",&n,&k)!=EOF)
    	if (n<=10000)
    	{
    		double ans=0.0;
    		for (int i=1;i<=n;i++)ans+=log(i);
    		ans/=log(k);
    		ans=ceil(ans+eps);
    		printf("%.0lf
    ",ans);
    	}else printf("%lld
    ",(long long)(0.5*log(2*pi*n,k)+n*log(n,k)-n*log(e,k))+1);
    }
    

      

    ——by zhber,转载请注明来源
  • 相关阅读:
    ajax 笔记
    EM Algorithm
    Support Vector Machine
    Factor Analysis
    Local weighted regression
    一点突发奇想
    纳什均衡
    自驾崇明东滩湿地
    程序员热力学第二定律
    SQL Server Identity 属性的问题
  • 原文地址:https://www.cnblogs.com/zhber/p/4036006.html
Copyright © 2011-2022 走看看