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;
//}