本题考察了gcd的性质,因为很久没学数论了就忘记了
我们令a<=b
则有gcd(a+c,b+c)=gcd(a+c,b−a)
呢末现在我们可以先对特殊情况进行特判
-1的特判就是两个数相邻的情况
因为我们一定是知道相邻的两个数是互质的所以可以特判为1
于是我们现在对有解的情况进行处理
我们枚举其中的质因数满足情况的c就应该是该质因数-a%该质因数
然后消除他的影响
然后继续进行中间取个min就行
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ios ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
signed main()
{
ios;
int a,b;
cin>>a>>b;
if((a%2==0&&b%2==0)||(a==b&&a!=1))
{
cout<<0<<endl;
}
else if(a%2==1&&b%2==1)
{
cout<<1<<endl;
}
else if(abs(a-b)==1)
{
cout<<-1<<endl;
}
else
{
if(a>b)
swap(a,b);
int d=b-a;
int ans=1e18;
for(int i=2;i*i<=d;i++)
{
if(d%i==0)
{
ans=min(ans,i-a%i);
while(d%i==0)
d/=i;
}
}
if(d>1)
{
ans=min(ans,d-a%d);
}
cout<<ans<<endl;
}
}