夏洛克和他的女朋友(

你离开我真会死。 提交于 2020-03-31 03:24:50

# 题意

n个珠宝,第 i 个珠宝的值是i+1,也就是珠宝的价值是2,3,4,......,n+1,

给这些珠宝染色,使得珠宝的价格是另一个珠宝的质因子的时候,两只珠宝的颜色不同

要求颜色数目最少,输出颜色数目和染色方案

n∈[1,1e5]

# 题解

二分图,所有质数放在一边,合数在另一边,所以最多只需要2种颜色

当二分图中没有边的时候只需要1种颜色,有边的时候需要2种

即存在合数的时候有边,无合数的时候无边

即当n>=3的时候必定存在合数。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e5+10;
 4 int p[N],cnt;
 5 bool st[N];
 6 void get_primes(int n){
 7     for(int i=2;i<=n;i++){
 8         if(!st[i]) p[cnt++]=i;
 9         for(int j=0;p[j]<=n/i;j++){
10             st[p[j]*i]=true;
11             if(i%p[j]==0) break;
12         }
13     }
14 }
15 int main(){
16     int n;
17     cin>>n;
18     get_primes(n+1);
19     if(n>2) puts("2");
20     else puts("1");
21 
22     for(int i=2;i<=n+1;i++){
23         if(st[i])
24             cout<<'2'<<' ';
25         else cout<<'1'<<' ';
26     }
27 }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!