提交时间:2026-06-06 14:36:44

运行 ID: 41956

#include<bits/stdc++.h> #define int long long using namespace std; const int N=1e5+7; int n,a[N]; int LG[N]; int ST[18][N]; inline int gcd(int a,int b){ return ((!a)||(!b))?(a+b):gcd(b,a%b); } inline int lcm(int a,int b){ if((!a)||(!b))return 0; return a/gcd(a,b)*b; } inline void GetLG(){ LG[0]=-1; for(int i=1;i<N;i++)LG[i]=LG[i>>1]+1; } inline void GetST(){ for(int i=1;i<=n;i++)ST[0][i]=a[i]; for(int j=1;j<=LG[n];j++){ for(int i=1;i<=n-(1<<j)+1;i++){ ST[j][i]=lcm(ST[j-1][i],ST[j-1][i+(1<<j-1)]); if(ST[j][i]>1e9+7)ST[j][i]=0; } } } inline int LCM(int l,int r){ int t=LG[r-l+1]; return lcm(ST[t][l],ST[t][r-(1<<t)+1]); } unordered_map<int,bool> mp; inline void slv(){ cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; GetST(); mp.clear(); for(int i=1;i<=n;i++){ int P=i,Val=a[i]; while(P<=n){ if(P!=i)Val=LCM(i,P); mp[Val]=1; if(!Val)break; int l=P,r=n; while(l<r){ int mid=l+r+1>>1; if(LCM(i,mid)==Val)l=mid; else r=mid-1; } P=l+1; } } int x=1; while(1){ if(!mp[x]){ cout<<x<<endl; return; } x++; } } signed main(){ freopen("humor.in","r",stdin); freopen("humor.out","w",stdout); GetLG(); int T;cin>>T; while(T--)slv(); return 0; }