最小公倍数

来源:互联网 发布:java redis分布式锁 编辑:程序博客网 时间:2024/05/16 08:11

正整数a和b的最小公倍数是指a和b的所有公倍数中最小的那个公倍数,例如4和6的最小公倍数12,3和 9的最小公倍数为9。

最小公倍数的求解在最大公约数的基础上进行,当得到a和b的最大公约数d的时候,可以马上得到a和b的最小公倍数是ab/d。

怎么理解呢?a和b的最大公约数就是集合a和集合b的交集,而最小公倍数为集合a和集合b的并集。要得到并集,由于ab会使公因子多计算一次,因此需要除掉一次公因子。

由于ab在实际计算的时候可能出现溢出的情况,因此更恰当的写法是 a/b*d。由于d是a和b的最大公约数,因此a/d一定可以整除。

多点测试:

样例输入

22 3 53 4 6 12

样例输出

1512

程序:

#include <iostream>#include <cstdio>#include <cstdlib>#include <string>#include <cstring>#include <sstream>#include <cmath>#include <vector>#include <algorithm>using namespace std;int gcd(int a,int  b){    return !b?a:gcd(b,a%b);}int lcm(int a,int b){    return a/gcd(a,b)*b;}int main(){    int n;    cin>>n;    for(int i=0;i<n;i++)    {        int m;        cin>>m;        int a,b;        cin>>a;        for(int j=0;j<m-1;j++)        {            cin>>b;            a=lcm(a,b);        }        cout<<a<<endl;    }    return 0;} 

这里写图片描述

原创粉丝点击