题意:
给定 n 和 b, 求 n的阶乘 在 b 进制下的位数
思路:
知识点:一个数 n 在 b 进制下在位数: log(b)n
这样的话需要打表预处理,用换底公式自己推一下
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<queue>
#include<stack>
#include<map>
#define PI acos(-1.0)
#define in freopen("in.txt", "r", stdin)
#define out freopen("out.txt", "w", stdout)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e6 + 7, maxd = 20 + 7, mod = 1e9 + 7;
const int INF = 0x7f7f7f7f;
double a[maxn];
void init() {
for(int i = 1; i < maxn; ++i) {
a[i] = a[i-1] + log(i);
}
}
int main() {
init();
int T;
scanf("%d", &T);
for(int tt = 1; tt <= T; ++tt) {
int n, b;
scanf("%d %d", &n, &b);
if(n == 0)
printf("Case %d: 1\n", tt);
else {
double ans = a[n] / log(b) + 1;
printf("Case %d: %d\n", tt, (int)ans);
}
}
return 0;
}