zoukankan      html  css  js  c++  java
  • C. Neko does Maths

    a+k与b+k的最小公倍数 求k最小

    lcm=a∗b/gcd

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

    a和b加上k之后产生的最大公因数必然是a-b的因子

    求差值 枚举差值的所有因子

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn=1e5+5;
    ll gcd(ll x,ll y) { return y==0 ? x: gcd(y,x%y); }
    ll lcm(ll x,ll y) { return x*y/gcd(x,y); }
    int main() {
        vector<int>v;
        ll a,b;
        cin>>a>>b;
        if(a>b) swap(a,b);
        ll s=b-a;
        for(int i=1;i*i<=s; i++) { //s的所有素数因子 
            if(s%i==0) {
                v.push_back(i);
                if(i*i!=s) v.push_back(s/i);
            }
        }
        ll ans=1e18+5,k;
        for(int i=0; i<v.size(); i++) { //枚举所有v 
            ll t=0,x=v[i];
            if(a%x!=0) t=x-a%x;
            x=lcm(a+t,b+t);
            if(ans>x) {
                ans=x;
                k=t;
            }
        }
        if(a==b) k=0;
        cout<<k<<endl;
        return 0;
    }
  • 相关阅读:
    numpy 矩阵和数组
    python map()
    python matplotlib plot
    python mean()
    预测数值型数据:回归
    散点图
    非均衡分类问题
    AdaBoost元算法
    2.1 n元排列
    1.3 数域
  • 原文地址:https://www.cnblogs.com/iwomeng/p/10797348.html
Copyright © 2011-2022 走看看