SPOJ 5161 FACVSPOW

来源:互联网 发布:python 输出汉字乱码 编辑:程序博客网 时间:2024/06/05 14:58

Description
f(n)=n!,g(n)=a^n,求最小的n使得f(n) > g(n)
Input
第一行一整数T表示用例组数,每组用例输入一整数a(1<=T<=1e4,2<=a<=1e6)
Output
对于每组用例,输出最小的n使得f(n) > g(n)
Sample Input
3
2
3
4
Sample Output
4
7
9
Solution
二分答案,用斯特林公式代替n!,两边取对数判断即可
Code

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<map>#include<set>#include<ctime>using namespace std;typedef long long ll;#define INF 0x3f3f3f3f#define maxn 1111const double PI=acos(-1.0);bool check(int mid,int a){    double n=1.0*mid;    if(n*log(n)-n+0.5*log(2.0*PI*n)>n*log(1.0*a))return 1;    return 0;}int main(){    int T,a;    scanf("%d",&T);    while(T--)    {        scanf("%d",&a);        int l=1,r=3e6,mid,ans;        while(l<=r)        {            mid=(l+r)/2;            if(check(mid,a))ans=mid,r=mid-1;            else l=mid+1;        }        printf("%d\n",ans);    }    return 0;}
原创粉丝点击