题目
题目描述
素数分布函数π(n)\pi (n)π(n)表示小于或等于n的素数的数目。例如π(10)=4\pi (10)=4π(10)=4(2,3,5,7是素数)。这个函数涉及到许多高等数论的内容,甚至和黎曼猜想挂钩,目前还有很多数学家正在不断探索其中的奥秘。千里之行始于足下,现在你开始关心一个问题:在正整数域中素数的分布是怎么样的。为了探索这个问题,你需要计算出一些π(n)\pi (n)π(n)的值。
输入描述:
第一行一个整数T(T≤1000)T(T \le 1000)T(T≤1000),表示数据的组数。 接下来一共T行,第i+1(1≤i≤T)i+1(1 \le i \le T)i+1(1≤i≤T)行表示第i组数据。每行一个正整数n(n≤1000)n (n\le 1000)n(n≤1000)。
输出描述:
输出T行,第i行对应输入的第i组数据。每行一个正整数,表示π(n)\pi (n)π(n)的值。
示例1
输入
1 10
输出
4
ACcode
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e3+10;
ll st[N],add[N],t;
void sai()//埃氏筛
{
st[1]=1;
for(ll i=2;i<=N-3;i++)
{
if(!st[i])
{
for(ll j=2;j*i<=N-3;j++)
{st[i*j]=1;}
}
}
}
int main()
{
sai();
for(ll i=1;i<=N-3;i++)//前缀和
add[i]=add[i-1]+(st[i]^1);
cin>>t;
while(t--)
{
ll n;cin>>n;
cout<<add[n]<<endl;
}
return 0;
}