1 条题解

  • 0
    @ 2024-10-5 22:00:13

    这个题的关键是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
    上传者