算法提高之夏洛克和他的女朋友
-
核心思想:筛质数
- 因为质因子与其合数不能为同一个颜色
- 所以将质数分一组 合数分一组 那么一定符合要求
- 结果颜色数量<=2:在n<=2时为1种颜色 >2时为2种颜色
cpp
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010;
int prime[N],cnt;
bool st[N];
void get_prime(int n)
{
for(int i=2;i<=n;i++)
{
if(!st[i]) prime[cnt++] = i;
for(int j=0;prime[j] * i <= n;j++)
{
st[prime[j]*i] = true;
if(i % prime[j] == 0) break;
}
}
}
int main()
{
int n;
cin>>n;
get_prime(n+1);
if(n<=2) cout<<1<<endl;
else cout<<2<<endl;
for(int i=2;i<=n+1;i++)
{
if(st[i]) cout<<"2 ";
else cout<<"1 ";
}
}