#include<cstdio>
#include<iostream>
#define maxn 400005
using namespace std;
int n;
int a[maxn];
int t[maxn*4];
int gcd(int a,int b){
	if(!b) return a;
	return gcd(b,a%b);
}
void refresh(int now){
	t[now]=gcd(t[now<<1],t[now<<1|1]);
}
void build(int l,int r,int now){
	if(l==r){
		t[now]=a[l];
		return;
	}
	int mid=(l+r)>>1;
	build(l,mid,now<<1);
	build(mid+1,r,now<<1|1);
	refresh(now);
}
int query(int l,int r,int now,int LL,int RR){
	if(LL<=l&&r<=RR){
		return t[now];
	}
	int mid=(l+r)>>1;
	int ans1=0,ans2=0;
	if(LL<=mid) ans1=query(l,mid,now<<1,LL,RR);
	if(mid<RR) ans2=query(mid+1,r,now<<1|1,LL,RR);
	refresh(now);
	if(ans1){
		if(ans2) return gcd(ans1,ans2);
		else return ans1;
	} 
	else return ans2;
}
int check(int l,int r){
	return query(1,2*n,1,l,r)==1;
}
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		scanf("%d",&n);
		for(int i=1;i<=n;i++){
			scanf("%d",&a[i]);
			a[n+i]=a[i];
		}
		int sum=a[1];
		for(int i=2;i<=n;i++){
			sum=gcd(sum,a[i]);
		}
		for(int i=1;i<=2*n;i++)
			a[i]/=sum;
		build(1,2*n,1);
		int maxl=0;
		for(int i=1;i<=n;i++){
			int l=i,r=i+n-1,ans;
			while(l<=r){
				int mid=(l+r)>>1;
				if(check(i,mid)) ans=mid-i,r=mid-1;
				else l=mid+1;
			} 
			maxl=max(maxl,ans);
		}
		printf("%d\n",maxl);
	}
	return 0;
}
