只要枚举第一组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;}