https://ac.nowcoder.com/acm/contest/54877/E
根据更相减损法 gcd(a+c,b+c) = gcd(a-b,a+c),由于a,b已经给出,a-b为固定值。
当a-b为1时,无解
当a-b为0时,若a = 1,则c = 1,否则 c = 0
对于a-b = 其他,对a-b做质因子分解,对于每一个质因子d去求最小的c使得gcd(d,a+c)!=1,发现c = d - a%d,最后维护一个最小值即可
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b;
signed main(){
cin>>a>>b;
if(a<b) swap(a,b);
int num = a-b;
if(num==1){
cout<<-1;
}
else if(num==0){
if(a==1) cout<<1;
else cout<<0;
}
else{
int k = num;
int ans = 1e15;
for(int i = 2;i*i<=num;i++){
if(k%i==0){
ans = min(ans,i-a%i);
}
while(k%i==0) {
k/=i;
}
}
if(k>1){
ans = min(ans,k-a%k);
}
cout<<ans;
}
}