天天看點

【斯特林公式】N!的k進制位數

題目描述

我們知道n!=n*(n-1)*(n-2)*…*2*1。

那麼給定一個n,n!是幾位數呢。

更困難的,n!的k進制數有多少位呢。

輸入

第一行是一個數T(1≤T≤50000),代表T組測試資料。

每一組測試資料占一行,有兩個整數n(0 ≤ n ≤ 10^6),k(2≤k≤1000)。

輸出

對于每組測試資料,輸出n!k進制數的位數。

樣例輸入

2
3 10
3 2
      

樣例輸出

1
3
      

最後除以log(k)

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#include<cmath>
const double Pi=acos(-1.0);
const double e=exp(1.0);
/*斯特林公式N!=sqrt(2*Pi*N)*(N/e)N次方,Pi=acos(-1.0) e=exp( -1.0 )*/
int main(){
int t;
scanf("%d",&t);
double n,k;
while(t--){
	scanf("%lf%lf",&n,&k);
	if(n==0||n==1)
	printf("1\n");
	else if(n==2&&k==2)
    printf("2\n");
	else
	printf("%.0lf\n",floor((log(sqrt(2*1.0*Pi*n))+n*log(n*1.0/e))/(log(k)))+1);
}
	return 0;
}