埃氏筛素数法
从2开始枚举所有数(已知2为素数),筛去每一个素数的倍数,剩下的就都是素数。
#include <cstdio> const int maxn = 1001; bool p[maxn] = {false}; int prime[maxn],pNum = 0; void find_prime(int n) { int i,j; for(i = 2;i < n;i++) //2为素数,已初始化,从2开始 { if(p[i] == false){ prime[pNum++] = i;//写入素数表 for(j = i+i;j < n;j += i) { p[j]=true; //若i为素数,将该范围内的所有i的倍数标记为合数 } } } } int main() { int n,i; scanf("%d",&n); find_prime(n); for(i = 0;i < pNum; i++) { printf("%d ",prime[i]); } return 0; }