# include<stdio.h>
# include<math.h>
int main()
{
long int prime[1000000 + 1];
long int i, j;
long int m = 0;//记录i的值,为循环变量的辅助变量
for (i = 3; i <= 1000000; i = i + 2)//所有的偶数全部干掉
prime[i] = 1;
for (i = 3; i <= sqrt((1000000 - 1)); i = i + 2)//第一层取平方数
{
//printf("i=%d/n",i);
m = i;
if (prime[i] == 1)
for (j = i*i; j <= 1000000; j = i*m)//筛法的第二层。从平方开始如果是存在的就筛掉
{
m = m + 2;
if (prime[j] == 1)
{
prime[j] = 0;
// printf("%d/t",j);//测试用例。用于查看筛掉的数
}
}//第二层结束
//printf( "/n");//测试用例。用于分割筛掉的数。分割间的数之间有相同的差
}//第一层结束
printf("%ld\n", 2); /*2非奇数故未在循环算法之内,但2是素数,故先输出*/
//打印质数
for (i = 3; i <= 1000000; i = i + 2)
if (prime[i] == 1)
{
printf("%ld\n", i);
}
return 0;
}
网友评论