算法:最大公约数

C语言:欧几里得算法最大公约数 文章目录欧几里得算法C语言:欧几里得算法最大公约数 欧几里得算法 举个例子说明欧几里得算法。 如图所示,用正方形地板砖,把这一块粉红色空地(长为xxx,宽为yyy,x>yx>yx>y)铺满。这个问题其实就是求空地长 xxx 和宽 yyy 的最大公约数。 那么我先取边长为y的地板砖进行铺设,如图所示: 在剩下的右侧粉红色空地中,再尽可能铺一块最大的地板砖,如图所示: 继续铺砖,直到全部铺满,此时图片中最小的地板砖边长(即图中黄色部分)便是 xxx 和 yyy的最大公约数。 C语言: 阅读详情

更新

调用GCD函数无需保证a > b,因为当a < b时,GCD(a, b)返回GCD(b, a % b)GCD(b, a)

扩展

输出分数p/q时,考虑0、负数和整数的特殊情况。

模板

#include "GCD.h"

/**
  * @brief: output the fraction p/q
  * @param p: numerator of fraction
  * @param q: denominator of fraction
  */
void FRAC(int p, int q) {
  if (p == 0) {  // p/q = 0
    printf("0");
    return;
  }
  int tag = 1;
  if (p < 0) {
    p = -p; 
    tag *= -1;
  }
  if (q < 0) {
    q = -q; 
    tag *= -1;
  }
  int tmp = GCD(p, q);
  p /= tmp, q /= tmp;
  if (tag == -1) printf("-");  // p/q < 0
  if (q == 1) printf("%d", p);  // integer
  else printf("%d/%d", p, q);  // fraction
}

很快ACM校集训队要选拔了,想学一波算法,顺便记下模板。

最大公约数

功能

输入两个数ab,输出ab的最大公约数。

最大公约数:

  1. 既可以整除a,也可以整除b的数,组成集合C
  2. 集合C中的最大元素,即最大公约数

思路

辗转相除法:

  1. ab中较大值max除以较小值min
  2. 若整除,则结果为min
  3. 若不整除,则令ab分别等于min和余数mod,递归步骤1
    可以证明,ab的最大公约数等于minmod的最大公约数。

时间复杂度

O(log n),考虑斐波那契数列,对数列相邻两项使用最大公约数算法为最坏情况,而斐波那契数列通项为指数数量级。

扩展

最大公约数与最小公倍数的乘积等于a * b

最小公倍数:

  1. 既可以被a整除,也可以被b整除的数,组成集合D
  2. 集合D中的最小元素,即最小公倍数

模板

/**
  * @param a: number A
  * @param b: number B
  * @return: the greatest common divisor of A and B
  */
int GCD(int a, int b) {
  return b == 0 ? a : GCD(b, a % b);
}

测试

#include "GCD.h"
#include <cstdio>
#include <cstdlib>
#include <ctime>

const int MAX = 100;
const int SIZE = 10;

int main() {
  int a, b, ans;
  
  srand(time(NULL));
  for (int i = 0; i < SIZE; ++i) {
    a = rand() % MAX + 1;
    b = rand() % MAX + 1;
    ans = GCD(a, b);
    printf("a = %3d, b = %3d, ans = %3d\n", a, b, ans);
  }

  return 0;
}
Coze离线部署实战:从镜像拉取到服务启动的完整避坑指南 本文提供了一份详尽的Coze平台离线部署实战指南。针对无外网的生产环境,详细讲解了从Docker镜像拉取、打包传输到内网服务器加载的完整流程,并重点剖析了使用docker-compose启动服务时常见的配置错误与权限问题,如文件挂载缺失、网络绑定错误等,提供了经过验证的避坑解决方案,旨在帮助运维和开发人员一次性成功部署。 阅读详情

相关推荐

YOLO26 数据标注工具:LabelImg、Label Studio实战指南:主流标注工具的安装配置与使用技巧,高效完成目标检测数据标注

本文介绍了目标检测中数据标注的核心地位与常用工具。数据标注质量直接影响模型性能,需要关注准确性、一致性等维度。文章详细讲解了边界框、类别标签等基本概念,并对比了LabelImg、Label Studio等主流标注工具的特点。重点介绍了LabelImg的轻量级、易用性等优势,以及Label Studio的协作功能,为不同规模项目提供标注工具选择建议。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1118

最大公约数的四种方法

求两数的最大公约数,一共有四种方法:暴力穷举法、更相减损法、辗转相除法、stein 算法,小女不才,花了几天的时间终于把这几种方法全部弄明白,现在就把它们全部分享出来。首先,假设被求的两个数为 x、y,且 x > y。最大公约数 d = gcd (x , y)

Hell_potato777的博客 1万+

门座起重机龙门起重机step和stp格式_零件图_机械工程图_机械三维3D建模图打包下载.zip

门座起重机龙门起重机step和stp格式_零件图_机械工程图_机械三维3D建模图打包下载

最大公约数的几种常见的方法 【详解】

这里比较推荐是用 辗转相除法(欧几里得算法)和 《九章算术》中的 更相减损法多说一下,因为当时阿明浅浅学过遍辗转相除法,然后不久后就忘干净了,用的时候还要再去反复找,为了方便使用,干脆把 求解最大公约数 的几种常见的方法详细介绍一下,虽然不是最好,但是多少希望对大家有些帮助!希望大家对这些方法,有更加深刻的印象。加油!!!

加油!!! 2万+

四种求最大公约数算法 C / C++

本篇文章总结了四种求最大公约数的常用算法。 包括:辗转相除法、穷举法(枚举法)、更相减损法、Stein算法。 每个算法都附加流程图及 C/C++ 代码,并对其时间复杂度进行了分析。 ...

weixin_61693556的博客 9861

辗转相除法、更相减损法、Stein算法

最大公约数和最小公倍数求解,常用的方法是短除法进行因式分解,然后最大公约数是所有公共因子的乘积,最小公倍数是所有因子的乘积。 本质上求最小公倍数就是求最大公倍数:x=m*a, y=m*b;m是最大公约数,那最小公倍数就是m*a*b。所以可以得到最大公约数与最小公倍数的关系: LCM(A,B)×GCD(A,B)=A×BLCM(A,B)×GCD(A,B)=A×B LCM(A,B)×GCD(A,...

CSDN文章已停止维护,后续文章会在 https://blog.hufeifei.cn 持续更新 1万+

四种算法最大公约数

1.辗转相除法 辗转相除法(又名欧几里德法)C语言中用于计算两个正整数a,b的最大公约数和最小公倍数,实质它依赖于下面的定理: 根据这一定理可以采用函数嵌套调用和递归调用形式进行求两个数的最大公约数和最小公倍数,现分别叙述如下: ①函数嵌套调用 其算法过程为: 前提:设两数为a,b设其中a 做被除数,b做除数,temp为余数 1、大数放a中、小数放b中; 2、求a/b的余数; 3、若temp=0...

qq_45915957的博客 2292

计算最大公约数的两种算法:辗转相除法和Stein算法

欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 其算法用C++语言描述为: int gcd(int m, int n) { if (m == 0) return n; if (n == 0) return m; if (m >= 1; n >>= 1; c >= 1; } else if (!is_even(m) && is_even(

highyyy的专栏 1315

常见算法:C语言求最小公倍数和最大公约数三种算法

最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求最小公倍数算法: 最小公倍数=两整数的乘积÷最大公约数最大公约数算法: (1)辗转相除法 有两整数a和b: ① a%b得余数c ② 若c=0,则b即为两数的最大公约数 ③ 若c

iwm_NeXT的专栏 41万+

上机作业:4种算法最大公约数

一.实验目的 明确算法的概念和特点。 通过对问题的分析,设计合理的算法解决问题; 二.实验内容 运行最大公约数的常用算法,并进行程序的调式与测试,要求程序设计风格良好,并添加异常处理模块(如输入非法等)。 1.辗转相除法 辗转相除法(又名欧几里德法)C语言中用于计算两个正整数a,b的最大公约数。 ①函数嵌套调用 其算法过程为: 前提:设两数为a,b设其中a 做被除数,b做除数,temp为余数 1...

qq_44710356的博客 430

数字世界的两面性:从乘积组合到最大公约数算法之旅

无论是面对需要创造性组合的复杂问题,还是需要提取本质的简单问题,算法思维都为我们提供了强大的工具。今天探讨的两个问题虽然看似不同,但都展现了算法设计的精髓:将现实问题抽象为数学模型,寻找深刻的数学洞察,最终设计出高效的计算方案。生成乘积数组的方案数问题教会我们,有时候最复杂的问题需要分解为最基本元素的组合;记住,在算法的世界里,没有真正简单的问题——只有尚未被深刻理解的问题。[2,6]:总共有 4 种方案得到长度为 2 且乘积为 6 的数组:[1,6],[2,3],[3,2],[6,1]。

司徒鸿的博客 1923

灵感编程:最大公约数算法解析

给定两个正整数,求其最大公约数,相信这是每一个写代码的同学绝壁遇见过的练习,当然解法也非常多,下面先给出一个没有经过任何算法处理的程序: public static int getResult(int a,int b){  int max = (a>b)?a:b;      int result=0;      for(int i = 1;i         if(a%i == 0 && b%i

twinslizzy的博客 487

递归:利用欧几里得算法递归求最大公约数

据欧几里得算法,利用公式gcd(a,b) = gcd(b,a mod b)不断进行递归,直到gcd(a,0)递归结束,此刻a就是a和b的最大公约数

weixin_39085745的博客 415

Python实战:五种高效算法求解最大公约数

本文详细介绍了在Python中求解最大公约数的五种经典算法,包括穷举法、高效的辗转相除法、古老的更相减损术、基于位运算的Stein算法以及直观的短除法。通过对比分析各算法的原理、实现代码与性能,帮助开发者深入理解算法思想,并明确在实际项目中应优先使用Python内置的`math.gcd`函数或高效的辗转相除法迭代版本。

weixin_29063681的博客 278

C++算法:三种方法求最大公约数和最小公倍数

三种方法求最大公约数和最小公倍数标题 首先明确最大公约数和最小公倍数的关系,设两个数为a,b;最大公约数为c,最大公倍数为d; 则ab=cd;怎么得到的可以通过数学算式证明。 分别用暴力搜索法,辗转相除法,更相减损法求最大公约数,求出最小公约数就求出了最小公倍数。 #include&lt;iostream&gt; using namespace std; int main() { //变量a,b...

weixin_44137260的博客 3820
上一篇: 2018年数学建模校赛
下一篇: 算法:模拟退火
FantasticGold
博客等级 码龄10年 15粉丝 45原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值