只要枚举第一组2个数的质因数就可以了,不用枚举所有的质因数。
一个2*1e9的质因数个数也没多少,不会超时。
#include<bits/stdc++.h>
#define maxn 150005
using namespace std;
typedef long long ll;
struct node{
ll x;
ll y;
}A[maxn];
set<ll>s;
int main()
{
int n;
cin>>n;
ll a,b;
cin>>a>>b;
for(int i=2;i*i<=a;i++)
{
if(a%i==0) s.insert(i);
while(a%i==0) a/=i;
}
if(a>1) s.insert(a);
for(int i=2;i*i<=b;i++)
{
if(b%i==0) {
s.insert(i);
/// cout<<"YES"<<endl;
}
while(b%i==0) b/=i;
}
if(b>1) s.insert(b);
for(int i=1;i<n;i++)
cin>>A[i].x>>A[i].y;
set<ll>::iterator iter=s.begin();
int ans=-1;
for(;iter!=s.end();iter++)
{
///cout<<(*iter)<<endl;
int flag=1;
ll temp=(*iter);
for(int i=1;i<n;i++)
if(A[i].x%temp!=0&&A[i].y%temp!=0)
{
flag=0;
break;
}
if(flag)
{
ans=temp;
break;
}
}
cout<<ans<<endl;
return 0;
}