#include<stdio.h>
void checkprime(int n);
int main(){
int n;
scanf("%d", &n);
checkprime(n);
return 0;
}
void checkprime(int n){ /*埃拉托色尼筛法*/
int i, j, cnt;
int *a = (int *)malloc(sizeof(int) * (n + 1)); //根据需要申请空间,a[i]为1表示素数,为0表示非素数
for(i = 0; i < n; i++)
a[i] = 1; //先将数组a中所有元素全部设成1,即假设全为素数
cnt = 0;
for(i = 2; i * i <= n; i++) /* i 只需要遍历到根号n即可 */
if(a[i]) //如果i是素数
for(j = i; j * i < n; j++)
a[j * i] = 0; /* 将其倍数全部删掉 */
for(i = 2; i <= n; i++)
if(a[i]){ //处理完后a[i] = 1则说明i是素数
cnt++;
printf("%4d%s", i, cnt % 10 ? " " : "\n"); //每10个换行
}
free(a); //释放空间
}