用欧拉筛筛出 2e5 范围内的所有质数,再遍历质数数组判断是否满足题目要求即可
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int pr[N],minp[N],vis[N];
int cnt=0;
void ol(int x)
{
for(int i=2;i<=x;i++)
{
if(!vis[i])
{
pr[cnt++]=i;
minp[i]=i;
}
for(int j=0;j<cnt;j++)
{
if(pr[j]*i>x) break;
vis[pr[j]*i]=1;
minp[pr[j]*i]=pr[j];
if(i%pr[j]==0) break;
}
}
}
int main(){
int t; cin>>t;
ol(N-10);
while(t--){
int x,y; cin>>x>>y;
int l=min(x,y),r=max(x,y);
int ans=-1;
for(int i=0;i<=cnt;i++){
int xx=gcd(x,pr[i]),yy=gcd(y,pr[i]);
if(pr[i]>r) break;
if(xx==1&&yy==1){
ans=pr[i];
break;
}
}
cout<<ans<<endl;
}
}