1 条题解
-
0
这个题的关键是a<b时,gcd(a+c,b+c)=gcd(a+c,b-a),如果不满足a<b,我们就得使用swap(a,b)交换a、b的位置,gcd表示的是两者最大公约数。
#include<bits/stdc++.h> #define int long long using namespace std; signed main() { int a,b; cin>>a>>b; if(a<b)swap(a,b); if(a==1&&b==1){ cout<<"1"; } else if(__gcd(a,b)!=1){ cout<<"0"; } else if(abs(a-b)==1){ cout<<"-1"; } else{ if(a<b){ swap(a,b); } int d=a-b,ans=1e18; for(int i=2;i*i<=d;i++){ if(d%i==0) { ans=min(ans,i-a%i); ans=min(ans,d/i-a%(d/i)); } } ans=min(ans,d-a%d); cout<<ans; } cout<<"\n"; return 0; }
- 1
信息
- ID
- 113
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 50
- 已通过
- 24
- 上传者