zoukankan      html  css  js  c++  java
  • Spoj-FACVSPOW Factorial vs Power

    Consider two integer sequences f(n) = n! and g(n) = an, where n is a positive integer. For any integer a > 1 the second sequence is greater than the first for a finite number of values. But starting from some integer k, f(n) is greater than g(n) for all n >= k. You are to find the least positive value of n for which f(n) > g(n), for a given positive integer a > 1.

    Input

    The first line of the input contains number t – the amount of tests. Then t test descriptions follow. Each test consist of a single number a.

    Constraints

    1 <= t <= 100000
    2 <= a <= 106

    Output

    For each test print the least positive value of n for which f(n) > g(n).

    Example

    Input:
    3
    2
    3
    4
    
    Output:
    4
    7
    9
    

    有很多组询问,给个常数1<=a<=100w,求使得n! > a^n 的最小整数n

    构造f(n)=n!,g(n)=a^n,a是常数,由高中知识就很容易知道f(n)趋近极限的速度最后会更快

    不妨令h(n)=f(n)-g(n),则h(n)应当是递增的(吧?)

    只要求h(n)=(n!-a^n) > 0的最小n

    因此可知当a增加的时候,h(n)的零点应当也是增加的

    所以可以枚举个a的值,不断增加n的值,只要n!>a^n,即log(n!)>nloga

    即log1+log2+...+logn>nloga

    左边的部分可以在枚举a的时候顺便求得

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<algorithm>
     6 #include<cmath>
     7 #include<queue>
     8 #include<deque>
     9 #include<set>
    10 #include<map>
    11 #include<ctime>
    12 #define LL long long
    13 #define inf 0x7ffffff
    14 #define pa pair<int,int>
    15 #define mkp(a,b) make_pair(a,b)
    16 #define pi 3.1415926535897932384626433832795028841971
    17 using namespace std;
    18 inline LL read()
    19 {
    20     LL x=0,f=1;char ch=getchar();
    21     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    22     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    23     return x*f;
    24 }
    25 int n;
    26 int ans[1000010];
    27 int main()
    28 {
    29     double s=0;int t=1;
    30     for (int i=1;i<=1000000;i++)
    31     {
    32         while (s<=t*log(i)){t++;s+=log(t);}
    33         ans[i]=t;
    34     }
    35     int T=read();
    36     while (T--){printf("%d
    ",ans[read()]);}
    37 }
    Spoj FACVSPOW
  • 相关阅读:
    Splay 详解
    莫队套值域分块
    浅谈区间众数
    回滚莫队分块
    带修莫队分块
    微服务规划准则
    mysql查询包含逗号的数据,并逗号拆分为多行展现
    python mysql 单连接和连接池简单示例
    代理模式八:装饰者模式
    代理模式七:迭代器模式
  • 原文地址:https://www.cnblogs.com/zhber/p/7228027.html
Copyright © 2011-2022 走看看