思路:
这是一道数学题。
假设N! 等于 NUM
对于 N!= NUM 做恒等变形
(ans向下取整)
最终的结果等于ans+1
#include <stdio.h>
#include <iostream>
#include <string>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
#include <math.h>
#include <vector>
#include <map>
using namespace std;
const int maxn = 1000005;
double hash[maxn];
double sum[maxn];
int main(){
//做一个预处理,查询的时候就可以达到 O(1)的复杂度
for(int i = 1;i < maxn;i++)//log(i)
hash[i] = log((double)i);
double temp = 0;
for(int i = 1;i < maxn;i++){//log(i) 1~n的前段和
temp += hash[i];
sum[i] += temp;
}
int t,n,base;
scanf("%d",&t);
for(int cas = 1;cas <= t;cas++){
scanf("%d%d",&n,&base);
printf("Case %d: %d\n",cas,(int)(sum[n]/hash[base])+1);
}
return 0;
}