最大公约数最小公倍数高效算法

一般来说求两个数最大公约数,我们最先想到的是先找到两个数中较小的数,

然后从较小的数开始递减暴力搜索,如果能同时被两个数整除,那么这个数就是最大公约数,不能则继续递减。

但是当两个数很大的时候,这个算法的效率就变得很差,这时我们就需要一个高效算法。

这里我们利用的是中国古代的辗转相除法,关于辗转相除法的思想可以自行百度,我在这里直接贴代码

#include<stdio.h>
int gcd(int a, int b){
	if (a == 0) return b;
	return gcd(b % a, a);
}
int main(){
	printf("%d", gcd(40, 15));
	return 0;
}

用这个递归的方法我们不用考虑a是否小于b,我们假设a大于b,

那么在第一次递归的时候,a和b自然就交换了

接下来就是求最小公倍数,

有了最大公约数,那么最小公倍数就非常好求,

因为  a * b / gcd(a, b) 就是最小公倍数

时间: 2024-11-05 16:35:18

最大公约数最小公倍数高效算法的相关文章

12--c完数/最大公约数/最小公倍数/素数/回文数

完数/最大公约数/最小公倍数/素数/回文数 2015-04-08 10:33 296人阅读 评论(0) 收藏 举报  分类: C/C++(60)  哈尔滨工业大学(8)  版权声明:本文为博主原创文章,未经博主允许不得转载. 1.一个正整数的因子是所有可以整除它的正整数.而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数.例如6=1+2+3(6的因子是1,2,3). [cpp] view plain copy #include <stdio.h> #include <math.h

两种方法求最大公约数最小公倍数

<pre name="code" class="cpp">/* *coyright(c)2014 龙城无泪 *All rights reserved *文件名称 digui.c *作者:封尘之魂 *完成日期:20141108 *版本号V1.0 *问题描述:求两个整数的最大公约数最小公倍数 *输入描述:输入两个整数 *输出描述:成功输出最大公约数最小公倍数 */ #include<stdio.h> int main() {int m,n,q,t

最大公约数 最小公倍数--------专题

#include <stdio.h> int gcd(int m,int n){ if(n==0)  return m;else return gcd(n,m%n); } ************* 变形一 int gcd(int m,int n) { if(m%n==0)  return m; else return gcd(n,m%n); } 变形二 int gcd(int m,int n) { return  n==0?  m :  gcd(n,m%n); } 变形三 int gcd(i

字符串元素重排高效算法集合

以下各题均有时间复杂度为O(n*n)或以空间换取时间使得时间空间复杂度为O(n)的算法,在此均不考虑. 问题一.字符串移动 字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变,要求时间和空间复杂度最小 .如"afdg**fa**hjfkdsl"变换成"****afdgfahjfkdsl" 此题前后字符串的长度不变,由于最终一边只有'*',另一边为字母,可以设置两个指针fast和slow,当str[fast]不为'*'时,赋值

斐波那契高效算法(4种算法综合分析)

斐波那契数列问题是算法学习者必定接触到的问题.作为经典问题,首次接触时通常是作为递归算法的案例教程. 然而递归解决斐波那契.其效率低的令人发指,有人算出其时间复杂度为O(2^n).指数级时间复杂度. 假设面试的时候面试官问你斐波那契的求解方法,你来一个递归求解,基本上能够说,你已经game over了. 那么有没有更高效的算法呢.本文将一一介绍. 以下是斐波那契的4种解法: 1.递归    时间复杂度O(2^n) int f(int n){ if(n == 1 || n == 2){ retur

推荐系统:技术、评估及高效算法

这篇是计算机类的优质预售推荐>>>><推荐系统:技术.评估及高效算法> 内容简介 本书汇聚不同领域专家学者的理论成果和实践经验,全面介绍推荐系统的主要概念.理论.趋势.挑战和应用,详细阐释如何支持用户决策.计划和购买过程.书中既详细讲解了经典方法,又介绍了一些新研究成果,内容涵盖人工智能.人机交互.信息技术.数据挖掘.统计学.自适应用户界面.决策支持系统.市场和客户行为等领域,无论是从事技术开发,还是从事产品营销的读者,都能从中受益. 本书可分成五部分,共25章.第1章

高效算法求解数独

title: 高效算法求解数独 date: 2019-12-26 17:55:16 tags: 数据结构与算法 categories: 数据结构与算法 背景 ??之前上python课的时候,有一次实验是求解数独,要求时间复杂度要低:为此老师讲解了一个高效的数独算法,我觉得算法挺有意思的,写篇博客记录一下. 描述 首先需要知晓数独的两个规则: 若某个位置的值已经确定,那么,和这个位置在同一行,同一列,同一个3×3的格子,都不能填写这个值,比如,九宫格(1,1)位置的值为2,那么,第一行,第一列,以

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

最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,当中一个最小的公倍数是他们的最小公倍数,相同地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求最小公倍数算法: 最小公倍数=两整数的乘积÷最大公约数 求最大公约数算法: (1)辗转相除法 有两整数a和b: ① a%b得余数c ② 若c=0,则b即为两数的最大公约数 ③ 若c≠0,则a=b,b=c,再回去运行① 比如求27和15的最大公约数过程为: 27÷15 余1215÷12余312÷3余0

C语言求最小公倍数和最大公约数三种算法(经典)

把以前写的一些经验总结汇个总,方便给未来的学弟学妹们做个参考! --------------------------永远爱你们的:Sakura 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求最小公倍数算法: 最小公倍数=两整数的乘积÷最大公约数 求最大公约数算法: (1)辗转相除法 有两整数a和b: ① a%b得余数c ② 若c=0,则b即为两