您的位置:首页 > 其它

NYOJ 187 快速查找素数

2016-07-25 21:38 471 查看
#include<stdio.h>
#define MAX 2000000
int prime[MAX];
int isNotprime[MAX];
int main()
{
int n;
scanf("%d",&n);
while(n)
{
int i,j,num=0;
for(i=2;i<=n;i++)
{
if(isNotprime[i]==0)
prime[num++]=i;
for(j=0;j<num&&prime[j]*i<=n;j++)
{
isNotprime[prime[j]*i]=1;
if(i%prime[j]==0)
break;
}
}
for(i=0;i<num;i++)
printf("%d ",prime[i]);
printf("\n");
scanf("%d",&n);
}
return 0;
}

好像是系统问题,所以超时。。。

下面是另一种个人认为比较好理解:

//#include<stdio.h>
//#include<string.h>
//#define N 2000010
//int prime
;
//int main()
//{
// int n;
// while(scanf("%d",&n)&&n!=0)
// {
// memset(prime,0,sizeof(prime));
// for(int i=2;i<N;i++)
// {
// if(!prime[i])
// {
// for(int j=2;j*i<=n;j++)
// prime[j*i]=1;
// }
// }
// for(int i=2;i<=n;i++)
// {
// if(!prime[i]) //prime[i]为0为素数
// {
// printf("%d ",i);
// }
// }
// printf("\n");
// }
// return 0;
//}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  NYOJ