您的位置:首页 > 其它

LightOJ 1045 Digits of Factorial

2012-12-02 20:25 459 查看
题目链接 http://lightoj.com/volume_showproblem.php?problem=1045
题意:计算N!在K进制下的位数,即计算log(1)+log(2)+...+log(N)其中log的底数都是K

思路:首先利用log(xy)=log(x)+log(y)可以求出log(n!)..然后换底公式求出log(b,n!)...然后加1即可。

询问次数很多,每次都重新算TLE的。

所以data[i]=1..i的log(i)之和,也就是前缀和的优化.然后O(1)回答每次询问。

#include <stdio.h>
#include <math.h>

double data[1000010];

int main()
{
	int T,n,b;
	scanf("%d",&T);
	for (int i=1;i<1000005;i++)
		data[i]=log(double(i))+data[i-1];
    for (int cas=1;cas<=T;cas++)
	{
        scanf("%d%d",&n,&b);
        printf("Case %d: %d\n",cas,int(data
/(data[b]-data[b-1]))+1);
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: