最大公约数和最小公倍数的求法

1.最大公倍数:一般用***欧几里得算法(辗转相除)***。
用gcd(a,b)表示a和b最大公约数,那么gcd(a,b)=gcd(b,a%b)或者gcd(a,0)=gcd(0,a)=a。
假设有两个数x,y,且x比较大。令余数r等于x%y
当r==0时:x可以被y整除,所以y就是这两个数的最大公约数。
当r!=0时:令x = y(除数变被除数),y = r(余数变除数),再做 r = x%y。递归,直到r == 0。
2.最小公倍数:因为两个数的成绩等于这两个数最大公约数和最下公倍数的乘积,所以最小公倍数就等于这两个数乘积除以最大公约数。
3.求多个数的最大公约数直接累加就行,就是用前两个数的最大公约数和第三数再求。
4.gcd(a,b)==1表示a,b为互质数

#include<iostream>
#include<cmath>
using namespace std;
int gcd(int a,int b)//欧几里得求最大公约数
{
    if(b!=0)
        return gcd(b,a%b);
    else
        return a;
}
int lcm(int a,int b)//最小公倍数
{
    return a*b/gcd(a,b);
}
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    cout<<gcd(gcd(a,b),c)<<endl;
    cout<<lcm(lcm(a,b),c)<<endl;
    return 0;
}

发布了35 篇原创文章 · 获赞 0 · 访问量 690

猜你喜欢

转载自blog.csdn.net/fendouzhilu666/article/details/104498420