来源:http://my.oschina.net/dianpaopao/blog/83844
#include<stdio.h>
#include<stdlib.h>
#define NMAX 10000000
#define SQRN 10000
int main()
{
int n;
scanf("%d",&n);
static char a[NMAX];
unsigned long k,i;
for(k=2;k<=SQRN;k++)
if(!a[k])
for(i=2*k;i<n;i+=k)
a[i]=1;
for(i=2;i<n;i++)
if(!a[i]) printf("%ld\n",i);
return 0;
}
PS:出处下面的评论更强大,还在理解中ing...
KB神的快一点。。。膜拜ing
//******************************************
//素数筛选和合数分解
const int MAXN=10000;
int prime[MAXN+1];
void getPrime()
{
memset(prime,0,sizeof(prime));
for(int i=2;i<=MAXN;i++)
{
if(!prime[i])prime[++prime[0]]=i;
for(int j=1;j<=prime[0]&&prime[j]<=MAXN/i;j++)
{
prime[prime[j]*i]=1;
if(i%prime[j]==0) break;
}
}
}
long long factor[100][2];