首页 > 其他分享 >GCD和LCM

GCD和LCM

时间:2024-10-15 10:19:37浏览次数:3  
标签:LCM GCD int 整除 lcm gcd

GCD(最大公约数)的性质

  1. 唯一性:对于任意两个非零整数 a 和 b,它们的最大公约数是唯一的。

  2. 非负性:GCD 总是非负的,即 gcd(a, b) ≥ 0

  3. 交换性gcd(a, b) = gcd(b, a)

  4. 结合性gcd(a, gcd(b, c)) = gcd(gcd(a, b), c)

  5. 分配性gcd(ka, kb) = k * gcd(a, b),其中 k 是正整数。

  6. 整除性gcd(a, b) 是 a 和 b 的公约数中最大的一个,即 gcd(a, b) 可以整除 a 和 b

  7. 与0的关系:如果 a 是非零整数,则 gcd(a, 0) = a

  8. 与负数的关系gcd(a, b) = gcd(|a|, |b|),即GCD不依赖于输入的符号。

  9. 与素数的关系:如果 p 是素数,且 p 整除 ab,则 p 整除 a 或 p 整除 b

LCM(最小公倍数)的性质

  1. 唯一性:对于任意两个非零整数 a 和 b,它们的最小公倍数是唯一的。

  2. 非负性:LCM 总是非负的,即 lcm(a, b) ≥ 0

  3. 交换性lcm(a, b) = lcm(b, a)

  4. 结合性lcm(a, lcm(b, c)) = lcm(lcm(a, b), c)

  5. 分配性lcm(ka, kb) = k * lcm(a, b),其中 k 是正整数。

  6. 整除性lcm(a, b) 是 a 和 b 的公倍数中最小的一个,即 a 和 b 都可以整除 lcm(a, b)

  7. 与0的关系:如果 a 是非零整数,则 lcm(a, 0) = 0

  8. 与负数的关系lcm(a, b) = lcm(|a|, |b|),即LCM不依赖于输入的符号。

  9. 与GCD的关系gcd(a, b) * lcm(a, b) = |a * b|

计算两个数的GCD,即最大公约数,可以使用欧几里得算法,这是一种非常高效的方法。欧几里得算法的基本思想是:

如果 a 能被 b 整除,那么 b 就是 a 和 b 的最大公约数。

否则,a 和 b 的最大公约数等于 b 和 a % b 的最大公约数。

#include <stdio.h>

// 计算两个数的GCD
int gcd(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

int main() {
    int a, b;
    printf("请输入两个正整数: ");
    scanf("%d %d", &a, &b);

    int result = gcd(a, b);
    printf("GCD(%d, %d) = %d\n", a, b, result);

    return 0;
}

计算两个数的LCM,即最大公倍数,可以使用以下公式:

#include <stdio.h>

// 计算两个数的GCD
int gcd(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

// 计算两个数的LCM
int lcm(int a, int b) {
    return (a * b) / gcd(a, b);
}

int main() {
    int a, b;
    printf("请输入两个正整数: ");
    scanf("%d %d", &a, &b);

    int result = lcm(a, b);
    printf("LCM(%d, %d) = %d\n", a, b, result);

    return 0;
}

*在c++中,我们也可以直接调用库函数,在调用库函数前,需要引用头文件#incluude<algorithm>

#include<algorithm>
int res = _gcd(a,b);
#include<algorithm>
int res = a * b / _gcd(a,b);

标签:LCM,GCD,int,整除,lcm,gcd
From: https://blog.csdn.net/2301_81188158/article/details/142780481

相关文章

  • JFinalcms代码审计
    JFinalCms是开源免费的JAVA企业网站开发建设管理系统,极速开发,动态添加字段,自定义标签,动态创建数据库表并crud数据,数据库备份、还原,动态添加站点(多站点功能),一键生成模板代码。环境布置:IDEA打开项目,等待maven加载好。使用phpstudy集成的mysql5.7数据库即可,导入JFinalCMS.sql数据......
  • 【VMware vSphere】VMware vSphere 9 将有 vLCM 重大改进?
    VMwareExplore2024LasVegas大会现已经结束一段时间了,有关此次大会的所有视频也都上传到了VMwareExploreVideoLibrary,大家如果有兴趣可以点击去查看这些会议的内容。我最近观看了“SimplifiedLifecycleManagementforVMwareCloudFoundationandVMwarevSphere[VCFB......
  • Interval GCD(单点修改线段树)
    细节不少//根据更相减损法gcd(x,y)=gcd(x,y-x)//推广到三项为gcd(x,y,z)=gcd(x,y-x,z-y)//可以推广到n项#include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecondtypedefpair<int,int>PII;typedeflonglongll;typedefunsignedlonglong......
  • [ARC122E] Increasing LCMs 题解
    感觉像比较套路的构造题。思路假如我们正着进行构造,可以发现我们加入一个数以后,对后面的数产生的影响是很大的。但是如果我们从最后一个数开始构造,那么可以发现它是不会对之后的构造产生任何影响的。应为越前面的数的限制会越少,那么可以填的数一定是不减的。一个数可以填在后......
  • Exgcd学习笔记
    Exgcd学习笔记引理Bézout'stheorem对于\(gcd(a,b)=d\)的情况,一定\(\existsx,y\),使得\(ax+by=d\)成立。相反的,当解方程\(ax+by=c\)时,若\(c\)不是\(d\)的倍数,那么此方程一定无解。Exgcd推导我们知道如何通过辗转相除法求出\(gcd(a,b)\),那么结合贝祖定理,不难......
  • gcd和lcm真厉害!
    做zr模拟赛的时候有这样一道题目:给出\(n\)个数\(a_1,a_2,...,a_n\)。求他们的lcm\(\bmod998244353\)的结果。\(n\le5000,a_i\le10^{18}\)。用pollard-rho的人希望你的考场上也能写出来这个东西,那我就没意见了,我先投降。考虑最朴素的求\(n\)个数的lcm的过程:假......
  • CF2013E prefix gcd
    给n个数,随意排序,所有前缀的gcd的和的最小值。只想到gcd变化是log次的,所以枚举每个作为开头,然后找让gcd变小的接上。可是这样是\(O(n^2)\).注意,最小的数要放最前面。假设\(x,a_1,a_2....\)和\(a_1,a_2,x...\).(x是最小的)我们有\(x+gcd(a_1,x)\leqa_1\),因为gcd的求法是\(a_......
  • GBase GCDW warehouse相关权限
    GCDW中,warehouse相关权限有三个,MODIFY_WAREHOUSE、OPERATE_WAREHOUSE、USAGE_WAREHOUSE;对应功能如下:MODIFY_WARHEOUSE:允许角色创建,删除,启动,挂起,修改warehouse属性的权限。OPERATE_WAREHOUSE:允许角色使用warehouse资源执行sql的权限,同时如果目标warehouse正处于suspend......
  • GBase GCDW云数据仓库的租户和用户介绍
    【GCDW租户】GCDW实例需云用户注册GCDW租户成功后,GBASE云服务系统给租户分配独立的实例,同时创建租户的数据库根用户,根用户即为该实例的超户,拥有该实例的最高权限,租户可以通过根用户登录自己的实例管理数据,也可以根据业务安全需求创建不同权限的角色和用户来管理数据。每个......
  • Exgcd 和 Excrt 的一些推导
    Exgcd和Excrt的一些推导ExgcdExgcd是用来求解二元一次不定方程的算法,即\[ax+by=c\]根据贝祖定理,该方程有解当且仅当\(\gcd(a,b)\midc\),所以只用求解\[ax+by=\gcd(a,b)\]又因为\[\gcd(a,b)=\gcd(b,a\bmodb)\]可以先求解\[bx'+(a\bmodb)y'=\gcd(a,b)\]变形得\[......