Rkhamim

Untitled

Oct 15th, 2020
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define MAXN 1e6+5
  4. int spf[1000008],a[500005],b[1000005];
  5. vector<int>prime;
  6. vector<int>cal[1000001];
  7. void sieve()
  8. {
  9. spf[1] = 1;
  10. for (int i=2; i<MAXN; i++)
  11. spf[i] = i;
  12. for (int i=4; i<MAXN; i+=2)
  13. spf[i] = 2;
  14. for (int i=3; i*i<MAXN; i++)
  15. {
  16. if (spf[i] == i)
  17. {
  18. for (int j=i*i; j<MAXN; j+=i)
  19. if (spf[j]==j)
  20. spf[j] = i;
  21. }
  22. }
  23. prime.push_back(2);
  24. for(int i=3;i<MAXN;i+=2)
  25. {
  26. if(spf[i]==i)
  27. prime.push_back(i);
  28. }
  29. }
  30. vector<int> getFactorization(int x)
  31. {
  32. vector<int> ret;
  33. while (x != 1)
  34. {
  35. if(ret.empty()||(ret.back()!=spf[x]))
  36. ret.push_back(spf[x]);
  37. x = x / spf[x];
  38. }
  39. return ret;
  40. }
  41. int main()
  42. {
  43. int t,n,m,x,y,z,i,j,k;
  44. sieve();
  45. for(i=1;i<=1000000;i++)
  46. cal[i]=getFactorization(i);
  47. scanf("%d",&t);
  48. while(t--)
  49. {
  50. scanf("%d",&n);
  51. for(i=1;i<=n;i++)scanf("%d",&a[i]);
  52. set<int>s;
  53. vector<int>p;
  54. x=0;
  55. i=1;
  56. j=1;
  57. z=i;
  58. while(j<=n&&i<=n)
  59. {
  60. y=0;
  61. for(k=0;k<cal[a[j]].size();k++)
  62. {
  63. if(b[cal[a[j]][k]])
  64. {
  65. y=1;break;
  66. }
  67. }
  68. if(y)
  69. {
  70. x=max(x,j-i);
  71. i++;
  72. for(k=0;k<cal[a[z]].size();k++)
  73. b[cal[a[z]][k]]=0;
  74. z=i;
  75. }
  76. else
  77. {
  78. for(k=0;k<cal[a[j]].size();k++)
  79. b[cal[a[j]][k]]=1;
  80. j++;
  81. }
  82. }
  83. x=max(x,j-i);
  84. if(x==1)
  85. printf("-1\n");
  86. else
  87. printf("%d\n",x);
  88. for(i=0;prime[i]<=1000000&&i<prime.size();i++)b[prime[i]]=0;
  89. }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment