zoukankan      html  css  js  c++  java
  • Codeforces Round #554 (Div. 2) C. Neko does Maths (简单推导)

    题目:http://codeforces.com/contest/1152/problem/C

    题意:给你a,b, 你可以找任意一个k     算出a+k,b+k的最小公倍数,让最小公倍数尽量小,求出这个k

    思路:

    因为现在两个都是未知数,我们无法确定

    我们根据gcd底层实现原理 

    gcd(a+k,b+k) = gcd(b-a,a+k)

    a=c*x;

    b=c*y;

    b-a=c*(y-x)

    所以证明b-a的因子是a的因子也是b的因子

    那么我们只要枚举出b-a的因子,然后再套入a+k中求得k,然后枚举取最优即可

    #include<bits/stdc++.h>
    #define maxn 100005
    #define mod 1000000007
    using namespace std;
    typedef long long ll;
    ll a,b;
    ll mx;
    ll k;
    void suan(ll x)
    {
        ll kk=(x-a%x)%x;
        ll dx=(a+kk)/x*(b+kk);
        if(mx==-1)
        {
            mx=dx;
            k=kk;
        }
        else if(dx==mx){
            k=min(k,kk);
        } 
        else if(dx<mx){
            mx=dx;
            k=kk;
        }
    }
    int main()
    {
        cin>>a>>b;
        if(a>b){
            ll t=b;
            b=a;
            a=t;
        }
        mx=-1;
        k=-1;
        ll sum=0;
        ll z=b-a;
        ll t=sqrt(z);
        for(int i=1;i<=t;i++)
        {
            if(z%i==0)
            {
                suan(i);
                suan(z/i);
            }    
        }
        cout<<max(k,(ll)0);
    }
  • 相关阅读:
    PKU1008
    PKU 1007
    PKU 3983
    PKU 1005
    PKU1004
    PKU 1003解题
    new.target
    debugger 关键字
    React 高阶组件
    CSS|规范
  • 原文地址:https://www.cnblogs.com/Lis-/p/10770632.html
Copyright © 2011-2022 走看看