只有当a为奇数,且n>a时情况较复杂,此时不能第a+1项直接从a+1开始输出,因为第a项a-1为偶数,a+1也为偶数,要找到一个与a-1互质的最小数r,第a+1项即为a-1+r,第a+2项为a+1,这样一直到a+r-1项为a+r-1,若n仍大于a+r-1,就类似上述过程找与a+r-1互质的最小数。
#include<bits///stdc++.h>
using namespace std;int Euclid_algorithm(int m,int n)
{
int temp;
while(m%n>0)
{
temp=n;
n=m%n;
m=temp;
}
return n;
}
int getprime(int x)
{
int i=3;
while(x%i==0||Euclid_algorithm(x,i)!=1) i+=2;
return i;
}
int main()
{
int t,n,a;
cin>>t;
for(int i=0;i<t;i++)
{
cin>>a>>n;
if(n==1) cout<<a<<endl;
else if(a==1) cout<<n<<endl;
else if(a%2==0)
{
if(n<=a) cout<<n-1<<endl;
else cout<<n<<endl;
}
else
{
if(n<=a) cout<<n-1<<endl;
else
{
int k=n-a;
int q=a-1;
int p=getprime(q);
while(k>=p)
{
q=q+p-1;
k=k-p+1;
p=getprime(q);
}
if(k==1) cout<<q+p<<endl;
else cout<<q+k<<endl;
}
}
}
return 0;
}