基本思想:素数的倍数一定不是素数,每一个合数都可以分解为多个质因子的积,每个合数只会被它的最小质因数筛去,因此每个数只会被标记一次
static int[] a=new int[1000];
static int[] b=new int[150000000];
public static void prime(int n)
{
int cnt=0;
for(int i=2;;i+=1)
{
if(b[i]==0)
{
a[cnt++]=i;
if(cnt>=n) return;
}
for(int j=0;j<cnt;j++)
{
b[i*a[j]]=1;
if(i%a[j]==0) break;
}
}
}