链接: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=1Ni1≈lnN
伟大的lglg大人告诉大家∑Pi≤n1Pi≈lnlnN\sum_{P_i \leq n}\frac{1}{P_i}≈lnlnN∑Pi≤nPi1≈lnlnN((P_i)为第i个质数)。
lglg大人需要测试他的信徒对他的忠诚。他要考察他的信徒所有小于等于n的素数的倒数之和是多少,用公式化的语言描述就是∑Pi<=n1Pi=ans\sum_{P_i<=n}\frac{1}{P_i}=ans∑Pi<=nPi1=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;
}