Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAXN 1010
  3. using namespace std;
  4. int pr[MAXN];
  5. bool is_composite[MAXN];
  6. int lp[MAXN];
  7. int cnt;
  8.  
  9. void linear_sieve(int n) {
  10.  
  11. for (int i = 2; i < n; ++i) {
  12. if (!is_composite[i]) {
  13. lp[i] = pr[cnt++] = i;
  14.  
  15. }
  16. for (int j = 0; j < cnt && i * pr[j] < n; ++j) {
  17. long long v = i * pr[j];
  18. is_composite[v] = true;
  19. lp[v] = pr[j];
  20.  
  21. }
  22. }
  23. }
  24. int main(){
  25. int a,t,n;
  26. scanf("%d",&t);
  27. linear_sieve(MAXN);
  28. while(t--){
  29. scanf("%d",&n);
  30. vector<int> p;
  31. vector<int> resp;
  32. resp.assign(n,0);
  33. for(int i=0;i<n;i++){
  34. scanf("%d",&a);
  35. p.push_back(a);
  36. }
  37. int cont = 0;
  38. int m = 0;
  39. int contcolor = 0;
  40. for(int i=0;i<1000;i++){
  41. bool usou = false;
  42. for(int j=0;j<n;j++){
  43. if(!(p[j]%pr[i])){
  44. if(!resp[j]){
  45. resp[j] = contcolor+1;
  46. usou = true;
  47. cont++;
  48. }
  49. }
  50. }
  51. if(usou) contcolor++;
  52. if(cont == n){
  53. break;
  54. }
  55. }
  56. printf("%d\n",contcolor);
  57. for(int i=0;i<n;i++){
  58. printf("%d ",resp[i]);
  59. }
  60. printf("\n");
  61.  
  62. }
  63. return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement