题目描述
链接:https://ac.nowcoder.com/acm/contest/33869/C
来源:牛客网
题意
思路
其实只需要判断有没有素数即可,因为最少的染色策略是让所有的素数的颜色相同,这样合数是另一种颜色,即答案为1或2(开始时没想到可以让素数颜色相同,所以就数了每个合数的素数个数qaq~)
code
#include<bits/stdc++.h>
#define DEBUG(x) #x<<":"<<(x)<<' '
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
const int INF=0x3f3f3f3f;
// const int mod=1e9+7;
const int N=1e5+10;
int arr[N];
void solv()
{
int n;
cin>>n;
n++;
int ans=0;
for(int i=2;i<=n;i++)
{
ans=max(ans,arr[i]);
if(!arr[i])
{
for(int j=i+i;j<=n;j+=i)
{
arr[j]++;
}
}
}
if(ans==0)cout<<1<<'\n';
else cout<<2<<'\n';
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int T=1;
// cin>>T;
while(T--)
{
solv();
}
return 0;
}
而实际上没有这么复杂。。。