Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define MAXN 1e6+5
- int spf[1000008],a[500005],b[1000005];
- vector<int>prime;
- vector<int>cal[1000001];
- void sieve()
- {
- spf[1] = 1;
- for (int i=2; i<MAXN; i++)
- spf[i] = i;
- for (int i=4; i<MAXN; i+=2)
- spf[i] = 2;
- for (int i=3; i*i<MAXN; i++)
- {
- if (spf[i] == i)
- {
- for (int j=i*i; j<MAXN; j+=i)
- if (spf[j]==j)
- spf[j] = i;
- }
- }
- prime.push_back(2);
- for(int i=3;i<MAXN;i+=2)
- {
- if(spf[i]==i)
- prime.push_back(i);
- }
- }
- vector<int> getFactorization(int x)
- {
- vector<int> ret;
- while (x != 1)
- {
- if(ret.empty()||(ret.back()!=spf[x]))
- ret.push_back(spf[x]);
- x = x / spf[x];
- }
- return ret;
- }
- int main()
- {
- int t,n,m,x,y,z,i,j,k;
- sieve();
- for(i=1;i<=1000000;i++)
- cal[i]=getFactorization(i);
- scanf("%d",&t);
- while(t--)
- {
- scanf("%d",&n);
- for(i=1;i<=n;i++)scanf("%d",&a[i]);
- set<int>s;
- vector<int>p;
- x=0;
- i=1;
- j=1;
- z=i;
- while(j<=n&&i<=n)
- {
- y=0;
- for(k=0;k<cal[a[j]].size();k++)
- {
- if(b[cal[a[j]][k]])
- {
- y=1;break;
- }
- }
- if(y)
- {
- x=max(x,j-i);
- i++;
- for(k=0;k<cal[a[z]].size();k++)
- b[cal[a[z]][k]]=0;
- z=i;
- }
- else
- {
- for(k=0;k<cal[a[j]].size();k++)
- b[cal[a[j]][k]]=1;
- j++;
- }
- }
- x=max(x,j-i);
- if(x==1)
- printf("-1\n");
- else
- printf("%d\n",x);
- for(i=0;prime[i]<=1000000&&i<prime.size();i++)b[prime[i]]=0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment