#include<cstdio>
#include<algorithm>
#include<vector>
#define maxn 10000005
using namespace std;
long long n;
int siz;
bool vis[maxn]={};
vector<int>prime;
int main(){
scanf("%lld",&n);
for(int i=2;i<=n;i++){
if(!vis[i]) prime.push_back(i),siz++;
for(int j=0;j<siz && i*prime[j]<=n;j++)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
bool flag=0;
for(int i=0;i<siz;i++){
if(flag) printf("*");
else flag=1;
printf("%d",prime[i]);
}
}
原理:每个数都只会别最小质因子筛到。