题目描述:
质数(prime number)又称素数,有无限个,质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
例如小于10的质数有2,3,5,7。
输入描述:
第一行输入一个整数T,表示询问的个数
接下来T行每行输入一个整数n.
1<=T<=1e8,1<=n<=1000000
输出描述:
对于每个询问n输出小于等于n的的质数的个数。
直接上代码
这里有篇博客,可以看下素数筛:
https://blog.csdn.net/qq_43876850/article/details/102518530
#include<iostream>
using namespace std;
int su[1000000+10]; //存放素数
bool u[1000000+10]; //判定素数
int i,j,k; //控制循环
int ans=0;
int t; //测试的次数
int n; //最大范围
int num=1;
void prepare()
{
for(i=2;i<=1000000;i++)
u[i]=true;
for(i=2;i<=1000000;i++)
if(u[i])
{
for(j=2;j*i<=1000000;j++)
u[i*j]=false;
}
for(i=2;i<=1000000;i++)
if(u[i])
{
su[num++]=i;
}
}
int main()
{
ios::sync_with_stdio(false); cout.tie(0); cin.tie(0);
prepare();
cin>>t;
while(t--)
{
ans=0;
cin>>n;
for(i=1;i<num;i++)
if(su[i]<=n)
ans++;
else
break;
cout<<ans<<endl;
}
return 0;
}

京公网安备 11010502036488号