Sherlock and His Girlfriend题解
2024-09-08 12:15:17
题目描述
Sherlock 有了一个新女友(这太不像他了!)。情人节到了,他想送给女友一些珠宝当做礼物。
他买了 n件珠宝。第i 件的价值是i+1。那就是说,珠宝的价值分别为2,3,4,…,n+1 。
Watson 挑战 Sherlock,让他给这些珠宝染色,使得一件珠宝的价格是另一件的质因子时,两件珠宝的颜色不同。并且,Watson 要求他最小化颜色的使用数。
请帮助 Sherlock 完成这个简单的任务。
输入格式
只有一行一个整数 ,表示珠宝件数。
输出格式
第一行一个整数 ,表示最少的染色数;
第二行 个整数,表示第 到第 件珠宝被染成的颜色。若有多种答案,输出任意一种。
样例
样例输入 1
3
样例输出 1
2
1 1 2
样例输入 2
4
样例输出 2
2
2 1 1 2
思路:
这道题十分简单,只需要把质数变为同一种颜色,合数变为同一种颜色就行了。代码如下:
#include<bits/stdc++.h>
using namespace std;
bool a[10000005]={};
int f[10000005],sum[10000005];
void SZS(int n){
memset(a,1,sizeof a);
int toto=0;
for(int i=2;i<=n;i++){
if(a[i])
f[++toto]=i;
for(int j=1;j<=toto&&i*f[j]<=n;j++){
a[i*f[j]]=0;
if(i%f[j]==0)
break;
} //线性筛
}
}
int main(){
int n;
scanf("%d",&n);
SZS(n+1); //因为n的j价值是n+1,所以需要在处理时加1;
if(n<=2){
printf("1\n"); //如果n=1,那么只有2,只用涂一种颜色
//如果n=2,那么价值为2,3,均是质数,也只用涂一种颜色;
}
else
printf("2\n"); //如果n>2,那么至少就有2,3,4,一定要涂两种颜色;
for(int i=2;i<=n+1;i++){
if(a[i]){
printf("1 "); //如果是质数,就涂1;
}
else
printf("2 "); //合数涂2;
//因为第一个的价值是2,所以不用考虑1这种既不是质数又不是合数的情况;
}
}
最新文章
- linux中kvm的安装及快照管理
- .Net中DataAdapter批量插入和更新数据总结
- Openjudge计算概论-单词翻转
- 浅谈自我对git的初步认识
- DataGridView中的单元格提示错误信息
- SQL跨数据库复制表数据
- bash 读入文件
- S5PV210(TQ210)裸机编程
- 存储过程系列之存储过程具体操作过程及sql数据库调用
- SQL 语句中按照in语句原有的顺序进行排序
- ActivatedEventArgs.IsApplicationInstancePreserved 属性
- JS实现等比例缩放图片
- LeetCode题解 15题 第二篇
- python非转基因HTTP请求库--Requests: 让 HTTP 服务人类
- js alert(“”)弹框 自定义样式
- BPF漫谈
- 自建yum仓库,分别为网络源和本地源
- Oracle入门《Oracle介绍》第一章1-4 Oracle 用户管理
- iptables增加、删除、修改、查询、保存防火墙策略教程
- 白盒测试实践-day....
热门文章
- ocalhost kernel: [244840.301449] nf_conntrack: nf_conntrack: table full, dropping packet
- 013.Python的文件操作
- 003.Python数据类型转换
- stm32中关于NVIC_SetVectorTable函数使用的疑惑与理解
- 七牛云-上传、删除文件,工具类(Day49)
- [论文阅读笔记] LouvainNE Hierarchical Louvain Method for High Quality and Scalable Network Embedding
- Mybatis学习-GetMybatisInMyHead
- GO学习-(35) Go实现日志收集系统4
- 特斯拉Tesla Model 3整体架构解析(上)
- Django(56)Mixins工具集的使用