1293. 夏洛克和他的女朋友
夏洛克有了一个新女友(这太不像他了!)。
情人节到了,他想送给女友一些珠宝当做礼物。
他买了 nn 件珠宝,第 ii 件的价值是 i+1i+1,也就是说,珠宝的价值分别为 2,3,…,n+12,3,…,n+1。
华生挑战夏洛克,让他给这些珠宝染色,使得一件珠宝的价格是另一件珠宝的价格的质因子时,两件珠宝的颜色不同。
并且,华生要求他使用的颜色数尽可能少。
请帮助夏洛克完成这个简单的任务。
输入格式
只有一行一个整数 nn,表示珠宝件数。
输出格式
第一行一个整数 kk,表示所使用的颜色数;
第二行 nn 个整数,表示第 11 到第 nn 件珠宝被染成的颜色。
若有多种答案,输出任意一种。
请用 11 到 kk 表示你用到的颜色。
数据范围
1≤n≤1051≤n≤105
输入样例1:
3
输出样例1:
2 1 1 2
输入样例2:
4
输出样例2:
2 2 1 1 2
//代码 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 1e6; int a[N]; int main() { for (int i = 2; i <= N; i ++ ) { for (int j = i*2; j <=N; j +=i ) if(!a[j])a[j]=1; } while (1) { int sum; cin >> sum; if(!sum)return 0; int aa,b; for (int i = 2; i <= sum; i ++ ) { if(!a[i]&&!a[sum-i]) { aa=i;b=sum-i; break; } } printf("%d = %d + %d\n",sum,aa,b); } }