最大公约数与最小公倍数

最大公约数与最小公倍数,又分别被称为gcd与lcm,在引入该概念之前,我们先来看看整除性问题。

定义:设a,b是两个整数,且b ≠ 0。如果存在整数c,使a=bc,则称a被b整除,或b整除a,记作 b | a。

最大公约数与最小公倍数的性质:

(1)若a | m,b | m,则 lcm(a,b) | m 。

(2)若d | a,d | b,则d | gcd(a,b)。

(3)lcm(a,b) = ab / gcd(a,b)。

(4)设m,a,b是正整数,则 lcm(ma,mb) = m*gcd(a,b)。

(5)设a=qb+r,其中a,b,q,r都是整数

         则有:gcd(a,b) = gcd(b,r)

由性质5引伸出辗转相除法,又称欧几里得算法

long long gcd(long long a, long long b)
{
    if (a < b)return gcd(b, a);
    if (b == 0)return a;
    else
        return gcd(b, a%b);
}

经过优化的分奇数和偶数的欧几里得算法

long long gcd(long long x, long long y)
{
    if (x < y) return gcd(y, x);//大数放在前面
    if (y == 0) return x;
    else {
        if (!(x % 2)) {
            if (!(y % 2))
                return 2 * gcd(x >> 1, y >> 1);//x,y皆为偶数
            else
                return gcd(x >> 1, y);//x为偶数,y是奇数
        }
        else
        {
            if (!(y % 2))
                return gcd(x, y >> 1);//x是奇数,y是偶数
            else
                return gcd(y, x - y);//x,y都是奇数
        }
    }
}

求最小公倍数的算法,这里直接套用公式,但是要注意,先除后乘,防止在运算过程爆数据

long long lcm(long long a, long long b)
{
    return a / lcm(a, b)*b;
}

拉梅定理

用欧几里得算法计算两个正整数的最大公因子时,所需的除法次数不会超过两个整数中较小的那个十进制数的倍数的5倍。

拉梅定理推论:求两个正整数a,b,a>b的最大公因子需要O(log2(a))^3次的位运算。

转载于:https://www.cnblogs.com/cloudplankroader/p/10543886.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值