是一个二分图染色。
质数不是质数的质因子,因为质数不会有因子,所以质数全是颜色1
合数不是合数的质因子,因为合数不“质”,所以合数全都是颜色2
n小于3的时候只有1种颜色,其他都是2种颜色。
#include<bits/stdc++.h>
using namespace std;
#define mem(a,x) memset(a,x,sizeof(a));
//======================
const int N=1e5+10;
int cnt=0;
int pri[N],v[N];
int n;
void shai()
{
mem(v,0);
for(int i=2;i<=n+1;i++)
{
if(!v[i])
{
v[i]=i;
pri[cnt++]=i;
}
for(int j=0;j<cnt;j++)
{
if(pri[j]>i||pri[j]*i>n+1) break;
v[pri[j]*i]=pri[j];
}
}
}
int main()
{
cin>>n;
if(n<3)
{
cout<<1<<endl;
for(int i=0;i<n;i++) cout<<1<<" ";
cout<<endl;
}
else
{
shai();
cout<<2<<endl;
for(int i=2;i<=n+1;i++)
{
if(v[i]==i) cout<<1<<" ";
else cout<<2<<" ";
}
}
return 0;
}