#include<iostream>
#include<string.h>
using namespace std;
int data[100005];// 用于存储获得素数
bool mark[100005];// 用于划掉非素数功能
int cnt = 0;// 往data中存储素数的时候的下标
int main(){
int k;// 获取2-k之间所有的素数
cin>>k;
// 开始默认都是素数
memset(mark,1,sizeof mark);
// 因为2是最小的素数所以从2开始过滤
for(int i=2;i<=k;i++){
// 标记的值是true说明还是素数
if(mark[i]){
// 此时i是素数追加到data中
data[++cnt] = i;
}
// 用当前i去乘以data中记录的素数,划掉mark中的非素数
for(int j=1;j<=cnt&&data[j]*i<=k;j++){
mark[data[j]*i]=false;
// 如果i能被其中一个素数整除则直接停止
if(i%data[j] == 0){
break;
}
}
}
for(int i=1;i<=cnt;i++){
cout<<data[i]<<' ';
}
return 0;
}