zoukankan      html  css  js  c++  java
  • 51nod 1012 最小公倍数LCM

    题目链接:http://class.51nod.com/Challenge/Problem.html#problemId=1012

    一、题目描述

    输入2个正整数A,B,求A与B的最小公倍数。

    输入
    2个数A,B,中间用空格隔开。(1<= A,B <= 10^9)
    输出
    输出A与B的最小公倍数。
    输入样例
    30 105
    输出样例
    210

    二、思路描述

    思路一:

    最小公倍数是这么求的:(这个思路建议笔算时使用)
    把12和18同时除以一个数,把除完的12称为x,把除完的18称为y。我们要一直除到x和y互质
    这时把12和18刚才除以的所有数字乘起来就得到了最大公约数(12和18的最大公约数是6)
    最大公约数再乘上x和y(这时x和y互质)就是最小公倍数了(12和18的最小公倍数是36)

    思路二:

    这道题还可以借助一个公式来求最小公倍数(这个思路建议编程序时使用)

    公式:x*y = gcd(x,y)*lcm(x,y)

    这个公式可以被证明:

    我们发现12和18都分别是6(12和18的最大公约数)的x倍和y倍
    6*2(x)得到12,12*3(y)得到36,36*6得到216。12*18也是216。
    这就证明了这个公式:x*y = gcd(x,y)*lcm(x,y)

    代码:(这里只显示思路二的代码)

    #include<cstdio>
    #include<iostream>
    using namespace std;
    
    long long gcd(long long x, long long y){//要求x和y的最大公约数 
        while(x % y){
            long long tmp = x % y;
            x = y;
            y = tmp;
        }
        return y;
    }
    
    long long lcm(long long x, long long y){
        return x*y / gcd(x,y);//我们利用这个公式求出最小公倍数 
    }
    
    int main(){
        long long a,b;
        cin >> a >> b;
        cout << lcm(a,b); 
        return 0;
    }
  • 相关阅读:
    Oracle Cannot Update TOP N Issue, 请专家解答
    .NET 匿名方法的BUG,请专家解答
    那些年我们追过的SQL
    迁移至csdn
    Vuejs的一些总结
    CSS命名规范——BEM思想
    Vuejs的一些总结
    shadow-dom 浅析
    javascript 对象封装的常用方式
    JavaScript的性能优化:加载和执行
  • 原文地址:https://www.cnblogs.com/elisa02/p/12786683.html
Copyright © 2011-2022 走看看