传送门:http://www.spoj.com/problems/FACVSPOW/en/
题意:给出一个数a,要求找到最小的n使得n!>a^n
题解:先将不等式两边取对数得到ln(1)+ln(2)+...+ln(n)>nln(a)
可以发现a<n<3a,所以先预处理3e5,再二分就可以得到答案
#include<bits/stdc++.h>
using namespace std;
const int MX = 3e6 + 5;
double sum[MX];
void init(){
sum[0]=0;
for(int i=1;i<MX;i++) sum[i]=sum[i-1]+log(i);
for(int i=1;i<MX;i++) sum[i]/=i;
}
int main(){
int a,T;
init();
scanf("%d",&T);
while(T--){
scanf("%d",&a);
printf("%d\n",lower_bound(sum,sum+MX,log(a))-sum);
}
return 0;
}