题目链接
题意:
给你n个数, 让你从中选出不超过11组集合,使这些集合满足结合内的元素不互质。
思路:
提前预处理出11个质因子,然后双重循环访问每一组元素,一个质因子选出来一组。
using namespace std;
int main()
{
int t;
cin >> t;
vector<int>pri;
bool v = true;
for(int i = 2; i <= 35; i++)
{
v = true;
for(int j = 2; j * j <= i; j++)
if(i % j == 0)
{
v = false;
break;
}
if(v)pri.push_back(i);
}
while(t--)
{
int n;
int m = 0;
cin >> n;
int a[1005];
int vis[1005];
bool va = true;
memset(vis, 0, sizeof vis);
for(int i = 0; i < n; cin >> a[i++]);
for(int i = 0; i < pri.size(); i++)
{
va = true;
for(int j = 0; j < n; j++)
{
if(vis[j] == 0)if(a[j] % pri[i] == 0){if(va)m++;va = false;vis[j] = m;}
}
}
cout << m << endl;
for(int i = 0; i < n - 1; i++)cout << vis[i] << " ";
cout << vis[n - 1] << endl;
}
return 0;
}