zoukankan      html  css  js  c++  java
  • [ 东莞市选 2008 ] GCD&LCM

    (\)

    (Description)


    给出两数的(GCD)(LCM),求合法的两数之差的绝对值最小是多少。

    • (GCD imes LCMle10^{18})

    (\)

    (Solution)


    多解的有趣小水题。

    (\)

    解法一:求出(GCD imes LCM),我们知道这个就等于两数之积,考虑枚举其中的一个数。

    考虑枚举的数一定是(GCD)的倍数,所以直接枚举就好,我们只需要处理枚举的数小于另一个数的情况,最后将所有算出来的答案取(min) 即可,复杂度 ( ext O(sqrt{LCM}))

    (\)

    解法二:(frac{LCM}{GCD}=frac A{GCD} imes frac B{GCD})枚举第二个式子左半部分,乘上更新答案。复杂度( ext O(sqrt{frac{LCM}{GCD}}))

    (\)

    解法三:还是上面的式子。考虑当(frac A{GCD})(frac B{GCD})最接近的时候产生的差值最小所以直接从(sqrt{frac{LCM}{GCD}})处开始枚举第一个遇见的答案一定是最优秀的。

    (\)

    (Code)


    #include<cmath>
    #include<cstdio>
    #include<cctype>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define R register
    using namespace std;
    typedef long long ll;
    
    ll a,b,ans=900000000000000ll;
    
    inline ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
    
    int main(){
      scanf("%lld%lld",&a,&b);
      b*=a;
      for(R ll i=a,j;i<=b;i+=a){
        if(b%i!=0) continue;
        j=b/i; if(i>j) break;
        if(gcd(i,j)==a) ans=min(ans,j-i);
      }
      printf("%lld
    ",ans);
      return 0;
    }
    
  • 相关阅读:
    tomcat常见错误及解决方案
    MySQL 5.6 for Windows 解压缩版配置安装
    win7 cmd 操作mysql数据库
    @Responsebody与@RequestBody
    ajax常用参数
    JSP和servlet有什么区别?
    面试 小总结
    cocoapods导入三方库头文件找不到问题
    git笔记
    iOS裁剪,缩放图片白边问题解决办法
  • 原文地址:https://www.cnblogs.com/SGCollin/p/9758244.html
Copyright © 2011-2022 走看看