一、一些性质

   \(gcd(a,b)=gcd(b,a)\)

   \(gcd(-a,b)=gcd(a,b)\)

   \(gcd(a,a)=|a|, gcd(a,0)=|a|\)

   \(gcd(a,1)=1\)

   \(gcd(a,b)=gcd(b, a mod b)\)

   \(gcd(a,b)=gcd(b, a-b)\)

   \(gcd(a,b)*lcm(a,b)=ab\)

   \(a|t,b|t⇒lcm(a,b)\)

   \(...\)

二、最大公约数-gcd

1.欧几里得辗转相除法
证明:

   设\(a=qb+r\),\(d|a\)且\(d|b\),

   \(∵a=qb+r,\)

   \(∴r=a-qb,\)

   \(∵d|a\)且\(d|b\)

   \(∴d | a -qb\)

   \(∴d | r\)

   \(∴a,b\)的公因数都是\(b,r\)的公因数

   \(∴gcd(a,b)=gcd(b,r)\)

代码实现:
int gcd(int a, int b){
return b == 0 ? a : gcd(b , a % b);
}
2.stein_gcd算法
代码实现:
int stein(int a, int b) {
if (a == 0) return b;
if (b == 0) return a;
if (a % 2 == 0 && b % 2 == 0) return stein(a >> 1, a >> 1) * 2; //当两数均为偶数时将其同时除以2至至少一数为奇数为止,记录除掉的所有公因数2的乘积k
else if (a % 2 == 0) return stein(a >> 1, b); //因为只有一个数含有2作为因数,所以除以2后gcd(a,b)不变
else if (b % 2 == 0) return stein(a, b >> 1); //同上
else return stein(abs(a - b), min(a, b)); //详情请查看'更相减损数'
}

三、最小公倍数-lcm

   基于gcd(a,b)*lcm(a,b)=ab这条性质则可求出最小公倍数

好像stein算法不是很常用,但的确弥补了欧几里得算法的一些缺点

最大公因数与最小公倍数-gcd&lcm的更多相关文章

  1. Mathematics:GCD & LCM Inverse(POJ 2429)

    根据最大公约数和最小公倍数求原来的两个数 题目大意,不翻译了,就是上面链接的意思. 具体思路就是要根据数论来,设a和b的GCD(最大公约数)和LCM(最小公倍数),则a/GCD*b/GCD=LCM/G ...

  2. C++实现--最大公因数和最小公倍数

    一丶 最大公因数求法: 辗转相除法(也称欧几里得算法)原理:   二丶最小公倍数求法:两个整数的最小公倍数等于两整数之积除以最大公约数   C++ 代码实现 #include <iostream ...

  3. POJ 2429 GCD & LCM Inverse(Pollard_Rho+dfs)

    [题目链接] http://poj.org/problem?id=2429 [题目大意] 给出最大公约数和最小公倍数,满足要求的x和y,且x+y最小 [题解] 我们发现,(x/gcd)*(y/gcd) ...

  4. hdu-3071 Gcd & Lcm game---质因数分解+状态压缩+线段树

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3071 题目大意: 给定一个长度为n的序列m次操作,操作的种类一共有三种 查询 L :查询一个区间的所 ...

  5. 数论入门2——gcd,lcm,exGCD,欧拉定理,乘法逆元,(ex)CRT,(ex)BSGS,(ex)Lucas,原根,Miller-Rabin,Pollard-Rho

    数论入门2 另一种类型的数论... GCD,LCM 定义\(gcd(a,b)\)为a和b的最大公约数,\(lcm(a,b)\)为a和b的最小公倍数,则有: 将a和b分解质因数为\(a=p1^{a1}p ...

  6. 数论3——gcd&&lcm

    gcd(a, b),就是求a和b的最大公约数 lcm(a, b),就是求a和b的最小公倍数 然后有个公式 a*b = gcd * lcm     ( gcd就是gcd(a, b), ( •̀∀•́ ) ...

  7. 模板 求GCD&LCM

    求最大公倍数 int GCD(int a,int b) { ) return b; else return GCD(b,a%b); } 求最小公倍数 int LCM(int a,int b) { re ...

  8. POJ2429 GCD & LCM Inverse pollard_rho大整数分解

    Given two positive integers a and b, we can easily calculate the greatest common divisor (GCD) and t ...

  9. POJ 2429 GCD & LCM Inverse (Pollard rho整数分解+dfs枚举)

    题意:给出a和b的gcd和lcm,让你求a和b.按升序输出a和b.若有多组满足条件的a和b,那么输出a+b最小的.思路:lcm=a*b/gcd   lcm/gcd=a/gcd*b/gcd 可知a/gc ...

随机推荐

  1. C# RabbitMQ的使用

    本文目的如题. 安装 先说一下RabbitMQ的安装,建议使用Docker镜像安装,Docker安装的好处是不管Windows系统还是Linux,安装步骤少,安装方法相同,不容易出错.使用下面的命令就 ...

  2. Redis常见使用场景

    缓存 数据共享分布式 分布式锁 全局ID 计数器 限流 位统计 购物车 用户消息时间线timeline 消息队列 抽奖 点赞.签到.打卡 商品标签 商品筛选 用户关注.推荐模型 排行榜 1.缓存 St ...

  3. C9软件工程非一线城市面试经验

    本人C9软件工程毕业,由于家境一般,不想去一线城市面对天价房价,所以面的都不是互联网大厂. 人生第一面: 2021.11.29 五某汽车 软件工程岗面试 提前3天发了短信,然后拉了一个面试微信群 1. ...

  4. 【项目管理】《IT项目管理》Kathy Schwalbe 第2章 IT项目管理和IT背景

    1.对项目管理采取系统的观点有何意义?如何在项目管理中采用系统的观点? 意义:有效处理复杂的环境 采用系统方法,系统分析,系统管理.2.解释组织的四个框架.他们是如何帮助项目经理理解项目的组织环境的? ...

  5. C++中常用的数学函数总结

    我们在C++程序设计的过程中往往会使用到一些数学函数,那么不同的数学运算要用到什么函数哪?大家可以参考我的总结如下: 首先引用到数学函数时一定要记得加函数头文件 #include<cmath&g ...

  6. centos7 安装python3 小白教程-CV大法

    安装python3 centos7,默认系统自带python2.7的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译安装源码包和系统默认包之间是没有任何 ...

  7. contos mongodb 安装

    创建.repo文件,生成mongodb的源 vi /etc/yum.repos.d/mongodb-org-4.0.repo [mongodb-org-4.0] name=MongoDB Reposi ...

  8. Storm集群安装Version1.0.1

    Storm集群安装,基于版本1.0.1, 使用apache-storm-1.0.1.tar.gz安装包. 1.安装规划 角色规划 IP/机器名 安装软件 运行进程 nimbus zdh-237 sto ...

  9. Kylin启动步骤

    Kylin本身的启动命令比较简单, 但是由于Kylin依赖的其他组件比较多, 所以把完整的启动步骤整理一下. 1.确保集群时间同步 首先查看集群中的时间是否同步 date 如果时间不一致,需要使用如下 ...

  10. zabbix监控图形中文乱码的解决方法

    问题描述: 最近搭建了一套zabbix,当我把语言切换到中文的时候,发现监控的图形界面中一些中文参数乱码,但是图形界面在英文环境下完全没有乱码问题.如下图(中文界面): 解决方法: 解决方法有两种,方 ...