又见素数
Time Limit:2000MS Memory Limit:65536K
Total Submit:287 Accepted:24
Description
给定一个正整数n(n <= 10000000),求n(包含)以内素数的个数。
Input
第一行为一个整数t(t <= 1000),表示测试数据的组数。
接下来有t行,每行一个整数n。
Output
对于每个n,求n以内素数的个数。
Sample Input
2
5
10
Sample Output
3
4
用了郭嵩山老师的《国际大学生程序设计例题解》上的改进的线性筛法。
原理是任何一个数都可以分解成素数相乘的形式。
#include
using namespace std;
const int MAXN=10000001;
bool isprime[MAXN]={0};
int prime[670000];
int init()
{
int i,j,total=0;
memset(isprime,true,sizeof(isprime));
for(i=2;i<=MAXN;i++)
{
if(isprime[i])
prime[total++]=i;
for(j=0;j
{
isprime[i*prime[j]]=false;
if(i%prime[j]==0)
break;
}
}
return total;
}
int main()
{
int T,n,i,total;
total=init();
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=0;i
if(n
break;
printf("%d/n",i);
}
return 0;
}