Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define MAXN 1010
- using namespace std;
- int pr[MAXN];
- bool is_composite[MAXN];
- int lp[MAXN];
- int cnt;
- void linear_sieve(int n) {
- for (int i = 2; i < n; ++i) {
- if (!is_composite[i]) {
- lp[i] = pr[cnt++] = i;
- }
- for (int j = 0; j < cnt && i * pr[j] < n; ++j) {
- long long v = i * pr[j];
- is_composite[v] = true;
- lp[v] = pr[j];
- }
- }
- }
- int main(){
- int a,t,n;
- scanf("%d",&t);
- linear_sieve(MAXN);
- while(t--){
- scanf("%d",&n);
- vector<int> p;
- vector<int> resp;
- resp.assign(n,0);
- for(int i=0;i<n;i++){
- scanf("%d",&a);
- p.push_back(a);
- }
- int cont = 0;
- int m = 0;
- int contcolor = 0;
- for(int i=0;i<1000;i++){
- bool usou = false;
- for(int j=0;j<n;j++){
- if(!(p[j]%pr[i])){
- if(!resp[j]){
- resp[j] = contcolor+1;
- usou = true;
- cont++;
- }
- }
- }
- if(usou) contcolor++;
- if(cont == n){
- break;
- }
- }
- printf("%d\n",contcolor);
- for(int i=0;i<n;i++){
- printf("%d ",resp[i]);
- }
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement