筛选法:对于不超过n的每个非负整数p,删除2p,3p,4p...当处理完所有数之后,还没没删除的就是素数。
代码中进行了相应的优化。
本代码功能,输入一个数,输出从1-该数之间的素数。功能待完善,可将所有素数存放到vis数组中。int k=0;vis[k++]=j;//待验证
1 #include<bits/stdc++.h> 2 using namespace std; 3 int vis[10000]; 4 int main() 5 { 6 int n; 7 while(scanf("%d",&n)) 8 { 9 //-------------- 10 int m=sqrt(n+0.5); 11 memset(vis,0,sizeof(vis)); 12 for(int i=2; i<=m; i++) 13 if(!vis[i]) 14 for(int j=i*i; j<=n; j+=i) 15 vis[j]=1; 16 //--------------- 17 for(int i=2; i<=n; i++) 18 if(!vis[i]) 19 printf(" %d",i); 20 } 21 }