zoukankan      html  css  js  c++  java
  • Lightoj1045 Digits of Factorial(数论)

    Description

    Factorial of an integer is defined by the following function

    f(0) = 1

    f(n) = f(n - 1) * n, if(n > 0)

    So, factorial of 5 is 120. But in different bases, the factorial may be different. For example, factorial of 5 in base 8 is 170.

    In this problem, you have to find the number of digit(s) of the factorial of an integer in a certain base.

    Input

    Input starts with an integer T (≤ 50000), denoting the number of test cases.

    Each case begins with two integers n (0 ≤ n ≤ 106) and base (2 ≤ base ≤ 1000). Both of these integers will be given in decimal.

    Output

    For each case of input you have to print the case number and the digit(s) of factorial n in the given base.

    Sample Input

    5

    5 10

    8 10

    22 3

    1000000 2

    0 100

    Sample Output

    Case 1: 3

    Case 2: 5

    Case 3: 45

    Case 4: 18488885

    Case 5: 1

    把n!(十进制)转化为base进制有多少位

    取位数用log  但是直接取会爆  可以把它拆开

    log(n!) = log(n)+log(n-1) + log(n-2) +...+log(2)

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<algorithm>
    using namespace std;
    double dp[1000001];
    int main()
    {
    	int t,n,base;
    	scanf("%d",&t);
    	dp[0]=0;
    	for(int i=1;i<1000001;i++)
    	{
    	 dp[i]+=dp[i-1]+log(i);	
    	}
    	for(int i=1;i<=t;i++)
    	{
    		scanf("%d%d",&n,&base);
    		printf("Case %d: %d
    ",i,int(dp[n]/log(base))+1);
    	}
    	return 0;
    }
    


    编程五分钟,调试两小时...
  • 相关阅读:
    ubnt+ros 接入无线
    生成new, old的 shell script
    lua学习记录
    反编译dtsi
    抓包软件PowerSniff开发计划
    android的ArrayMap类
    京东买的5本书
    c++ 变量必须初始化吗???
    cocos2dx 很好的源码分析博文
    cocos2dx 最基本,纯色、字体、图片
  • 原文地址:https://www.cnblogs.com/kingjordan/p/12027034.html
Copyright © 2011-2022 走看看