链接:https://ac.nowcoder.com/acm/contest/1838/M
来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

lglg说要有题,于是便有了题。
lglg的忠诚***为了纪念lglg大人的伟大。出了一道lglg题来纪念lglg大人。 
根据质数的分布我们知道小于n的质数大约有xlnx\frac{x}{lnx}lnxx​个,换一句话来说我们可以近似的认为每lnx个数里面就会有一个素数。 
聪明的大家应该都知道∑i=1N1i≈lnN\sum_{i=1}^{N}\frac{1}{i}≈lnN∑i=1N​i1​≈lnN
伟大的lglg大人告诉大家∑Pi≤n1Pi≈lnlnN\sum_{P_i \leq n}\frac{1}{P_i}≈lnlnN∑Pi​≤n​Pi​1​≈lnlnN((P_i)为第i个质数)。 
lglg大人需要测试他的信徒对他的忠诚。他要考察他的信徒所有小于等于n的素数的倒数之和是多少,用公式化的语言描述就是∑Pi<=n1Pi=ans\sum_{P_i<=n}\frac{1}{P_i}=ans∑Pi​<=n​Pi​1​=ans

 

 

 

输入描述:

第一行输入一个 T (t<=1e4)
接下来每行一个正整数n,用来描述题意中的那个n (1<= n <= 3*1e8)。

输出描述:

对于每一个输入需要输出一个ans,对于答案保留整数。

本题没有SPJ,请采用如下方式输出以保证和出题人答案一致。

输出方式

printf("%.0lf")

示例1

输入

复制

3 
2 
4 
280

输出

复制

0 
1 
2

 

请看第二组样例

请看第二组样例

请看第二组样例

请看第二组样例

请看第二组样例

请看第二组样例

请看第二组样例

劳资打了1小时的表找整数的边界

这垃圾题给整四舍五入(hehe)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    int t;
    ll n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lld",&n);
        double ans;
        if(n<3)
            ans=0;
        else if(n>=3&&n<29)
            ans=1;
        else if(n>=29&&n<11789)
            ans=2;
        else
            ans=3;
        printf("%.0lf\n",ans);
    }
    return 0;
}