算法提高之夏洛克和他的女朋友
-
核心思想:筛质数
- 因为质因子与其合数不能为同一个颜色
- 所以将质数分一组 合数分一组 那么一定符合要求
- 结果颜色数量<=2:在n<=2时为1种颜色 >2时为2种颜色
-
#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 "; } }