码迷,mamicode.com
首页 > 其他好文 > 详细

CF-div2-630-B - Composite Coloring

时间:2020-04-01 10:51:14      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:质因数   void   main   names   return   根据   ret   map   std   

思路

1.一个数字能够分解成有限个素数的乘积 —— 唯一分解定理
2.平方小于1000的只有11个质因数
3.所以只要把最小质因子相同的归为一类即可,根据(2)最后分类数一定小于等于11,满足题目要求

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1100;
int t,n;
int a[maxn];
int prime[11] = {2,3,5,7,11,13,17,19,23,29,31};
int vis[11];
map<int,int > mp;

//1.一个数字能够分解成若干个素数的乘积——唯一分解定理
//2.小于1000的数 质因子一定是小于等于11的 
//3.所以只要把最小质因子相同的归为一类即可,根据(2)最后分类数一定小于11 

void solve(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=0;i<11;i++) vis[i] = 0; 
	int cnt = 0;
	for(int i=1;i<=n;i++){
		for(int j=0;j<11;j++){
			if(a[i] % prime[j] == 0){
				if(vis[j]==0) vis[j] = ++cnt;
				mp[i] = vis[j];
				break;
			}
		}
	} 
	cout<<cnt<<endl;
	for(int i=1;i<=n;i++){
		cout<<mp[i]<<" ";
	}
	cout<<endl;
}

int main(){
	cin>>t;
	while(t--){
		solve();
	}	
	return 0;
}

CF-div2-630-B - Composite Coloring

标签:质因数   void   main   names   return   根据   ret   map   std   

原文地址:https://www.cnblogs.com/fisherss/p/12610766.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!