天天看点

Codeforces Round #554 (Div. 2) C - Neko does Maths (GCD,枚举因子)

🍇 🍇 🍇

Codeforces Round #554 (Div. 2) C - Neko does Maths (GCD,枚举因子)
#define int ll
ll gcd(ll a,ll b){return b==0?a : gcd(b,a%b);}
ll lcm(ll a,ll b){return a*b/gcd(a,b);}
signed main()
{
    int a,b;cin>>a>>b;
    if(a<b) swap(a,b);
    if(a%b==0) cout<<0<<endl;
    else
    {
        vi ans;
        for(int i = 1; i*i<=(a-b);++i) 
        {
            if((a-b)%i==0)
            {
                ans.push_back(i);
                if(i*i!=(a-b)) ans.push_back((a-b)/i);
            }
        }
        int fun = 0,minlcm  = lcm(a,b);
        for(auto now:ans)
        {
            int k = (now - b%now)%now;
            if(lcm(a+k,b+k)< minlcm||(lcm(a+k,b+k)== minlcm&&k<fun))
            {
                fun = k;
                minlcm =lcm(a+k,b+k);
            }
        }
        cout<<fun<<endl;
    }
    return 0;
}