最大公约数和最小公倍数算法

最大公约数和最小公倍数算法
最大公约数和最小公倍数算法

C语言求最大公约数和最小公倍数算法假设求任意两个整数的最大公约数和最小公倍数,采用函数调用形式进行。

1、辗转相除法

辗转相除法(又名欧几里德法)C语言中用于计算两个正整数a,b的最大公约数和最小公倍数,实质它依赖于下面的定理:

a b=0

gcd(a,b) =

gcd(b,a mod b) b!=0

根据这一定理可以采用函数嵌套调用和递归调用形式进行求两个数的最大公约数和最小公倍数,现分别叙述如下:

①、函数嵌套调用

其算法过程为:前提:设两数为a,b设其中a 做被除数,b做除数,temp为余数

1、大数放a中、小数放b中;

2、求a/b的余数;

3、若temp=0则b为最大公约数;

4、如果temp!=0则把b的值给a、temp的值给a;

5、返回第第二步;

代码:

int divisor (int a,int b) /*自定义函数求两数的最大公约数*/

{

int temp; /*定义整型变量*/

if(a

{ temp=a;a=b;b=temp;} /*设置中间变量进行两数交换*/

while(b!=0) /*通过循环求两数的余数,直到余数为0*/

{

temp=a%b;

a=b; /*变量数值交换*/

b=temp;

}

return (a); /*返回最大公约数到调用函数处*/

}

int multiple (int a,int b) /*自定义函数求两数的最小公倍数*/

{

int divisor (int a,int b); /*自定义函数返回值类型*/

int temp;

temp=divisor(a,b); /*再次调用自定义函数,求出最大公约数*/

return (a*b/temp); /*返回最小公倍数到主调函数处进行输出*/

}

#include "stdio.h" /*输入输出类头文件*/

main()

{

int m,n,t1,t2; /*定义整型变量*/

printf("please input two integer number:"); /*提示输入两个整数*/

scanf("%d%d",&m,&n); /*通过终端输入两个数*/

t1=divisor(m,n); /*自定义主调函数*/

t2=multiple(m,n); /*自定义主调函数*/

printf("The higest common divisor is %d\n",t1);/*输出最大公约数*/

printf("The lowest common multiple is %d\n", t2); /*输出最小公倍数*/

}

②、函数递归调用

int gcd (int a,int b)

{ if(a%b==0)

return b;

else

return gcd(b,a%b);

}

#include "stdio.h"

main()

{

int m,n,t1;

printf("please input two integer number:");

scanf("%d%d",&m,&n);

t1=gcd(m,n);

printf("The highest common divisor is %d\n",t1);/*最大公约数*/

printf("The least common multiple is %d\n",m*n/t1);/*最小公倍数*/

}

启示:采用递归调用法要注意递归终止条件的描述,只有找到递归变化的规律,才能有效地解决问题。

2、穷举法(利用数学定义)

穷举法(也叫枚举法)穷举法求两个正整数的最大公约数的解题步骤:从两个数中较小数开始由大到小列举,直到找到公约数立即中断列举,得到的公约数便是最大公约数。

①、定义1:对两个正整数a,b如果能在区间[a,0]或[b,0]内能找到一个整数temp能同时被a和b所整除,则temp即为最大公约数。

代码为:

int divisor (int a,int b) /*自定义函数求两数的最大公约数*/

{

int temp; /*定义义整型变量*/

temp=(a>b)?b:a; /*采种条件运算表达式求出两个数中的最小值*/

while(temp>0)

{

if (a%temp==0&&b%temp==0) /*只要找到一个数能同时被a,b所整除,则中止循环*/ break;

temp--; /*如不满足if条件则变量自减,直到能被a,b所整除*/

}

return (temp); /*返回满足条件的数到主调函数处*/

}

#include "stdio.h"

main()

{

int m,n,t1;

printf("please input two integer number:");

scanf("%d%d",&m,&n);

t1=divisor(m,n);

printf("The higest common divisor is %d\n",t1);

}

②、定义2:对两个正整数a,b,如果若干个a之和或b之和能被b所整除或能被a所整除,则该和数即为所求的最小公倍数。

代码为:

int multiple (int a,int b)

{

int p,q,temp;

p=(a>b)?a:b; /*求两个数中的最大值*/

q=(a>b)?b:a; /*求两个数中的最小值*/

temp=p; /*最大值赋给p为变量自增作准备*/

while(1) /*利用循环语句来求满足条件的数值*/

{

if(p%q==0)

break; /*只要找到变量的和数能被a或b所整除,则中止循环*/

p+=temp; /*如果条件不满足则变量自身相加*/

}

return (p);

}

#include "stdio.h"

main()

{

int m,n,t2;

printf("please input two integer number:");

scanf("%d%d",&m,&n);

t2=multiple(m,n);

printf("The least common multiple is %d\n",t2);

}

快速求最小公倍数的四种方法

快速求最小公倍数的四种方法

快速求最小公倍数的四种方法 我们在求最小公倍数时一般用短除法来求的,其实在很多情况下, 求两个数的最小公倍数可以用口算直接求出。下面就给大家介绍四种。 一、两数相乘法。 如果两个数是互质数。那么它们的最小公倍数就是这两个数的乘积。 例如:4和7的最小公倍数就是4×7=28。 二、找大数法。 如果两个数有倍数关系。那么较大的数就是这两个数的最小公倍数。 例如:3和15的最小公倍数就是较大数15。 三、扩大法 如果两数不是互质,也没有倍数关系时,可以把较大数依次扩大2倍、3倍、 ……看扩大到哪个数时最先成为较小数的倍数时,这个数就是这两个数的最小公倍数。 例如:18和30的最小公倍数,就是把30扩大2倍得60,60不是18的倍数; 再把30扩大3倍得90,90是18的倍数,那么90就是18和30的最小公倍数。 四、两数的乘积再除以两数的最大公约数法。 这个方法虽然比较复杂,但是使用范围很广。 因为两个数的乘积等于这两个数的最大公约数和最小公倍数的乘积。 例如:4和6的最大公约数是2,最小公倍数是12,那么,4×6=2×12。

为了便于口算,我们可以把两个数中的任意一个数先除以它们的最大公约数, 然后再和另一个数相乘。例如:18和30的最大公约数是6, 要求18和30的最小公倍数时,可以先用18除以6得3,再用3和30相乘得90; 或者先用30除以6得5,再用5和18相乘得90。这90就是18和30的最小公倍数。 方法1:把他们的倍数罗列出来找 因为:6的倍数:6、12、18、24、30`````` 10的倍数有:10 、20、30、40`````` 15的倍数有:15、30、45、60、75`````` 所以:6、10、15的最小公倍数是30 方法2:分解质因数 6=2*3 10=2*5 15=3*5 他们的最小公倍数:2*3*5=30 方法3:短除法

最大公约数的三种算法 复杂度分析 时间计算

昆明理工大学信息工程与自动化学院学生实验报告 (2011 —2012 学年第 1 学期) 课程名称:算法设计与分析开课实验室:信自楼机房444 2011 年10月 12日 一、上机目的及内容 1.上机内容 求两个自然数m和n的最大公约数。 2.上机目的 (1)复习数据结构课程的相关知识,实现课程间的平滑过渡; (2)掌握并应用算法的数学分析和后验分析方法; (3)理解这样一个观点:不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。 二、实验原理及基本技术路线图(方框原理图或程序流程图) (1)至少设计出三个版本的求最大公约数算法; (2)对所设计的算法采用大O符号进行时间复杂性分析; (3)上机实现算法,并用计数法和计时法分别测算算法的运行时间; (4)通过分析对比,得出自己的结论。 三、所用仪器、材料(设备名称、型号、规格等或使用软件) 1台PC及VISUAL C++6.0软件 四、实验方法、步骤(或:程序代码或操作过程) 实验采用三种方法求最大公约数

1、连续整数检测法。 2、欧几里得算法 3、分解质因数算法 根据实现提示写代码并分析代码的时间复杂度: 方法一: int f1(int m,int n) { int t; if(m>n)t=n; else t=m; while(t) { if(m%t==0&&n%t==0)break; else t=t-1; } return t; } 根据代码考虑最坏情况他们的最大公约数是1,循环做了t-1次,最好情况是只做了1次,可以得出O(n)=n/2; 方法二:int f2(int m,int n) { int r; r=m%n; while(r!=0) { m=n; n=r; r=m%n; } return n; } 根据代码辗转相除得到欧几里得的O(n)= log n 方法三: int f3(int m,int n) { int i=2,j=0,h=0; int a[N],b[N],c[N]; while(i

两个数的最小公倍数

两个数的最小公倍数 教学内容:P72例1P73例2 教学目标: 1、使学生理解最小公倍数的意义,初步掌握求两个数的最小公倍数的方法,会求两个数的最小公倍数。 2、培养学生的观察能力,分析能力,归纳概括能力。 教学重点:会求两个数的最小公倍数。 教学难点:探索求两个数的最小公倍数的方法。 教学过程: 一、新课引入 师:前几天我们学习了求两个数的最大公约数,今天我们一起来研究两个数的公倍数。板书部分课题:两个数的公倍数。 二、进行新课 1、公倍数和最小公倍数的意义 师:谁能说说什么是两个数的公倍数? 师:下面请同学们分小组找找4和6的公倍数,看哪一组想到的办法多。 小组活动后汇报。 师:冈財同学们自己想出了不少办法求4和6的公倍数,发现它们的公倍数有多少?有没有 最大的?最小的是几?我们可以把12叫做什么? 补充课题板书:最小 2、探索求最小公倍数的方法 师:我们能不能找到一种简便地求两个数的的最小公倍数的方法? 12是4和6的最小公倍 数,我们来看看12与4和6的的质因数之间有什么关系? 4 = 2*2 6 = 2*3 发现4和6有公有的质因数2, 4还有独有的质因数2, 6还有独有的质因数3, 只要将4 和6公有的质因数2取一次,再乘以它们各自独有的质因数,即2*2*3就是4和6的最 小公倍数。 为了简便,我们可以将两个短除合并,这样写: 2| 4 6 2 3 4和6的最小公倍数是2*2*3 = 12 试一试:P74做一做 三、课堂练习 1、求下面每组数的最小公倍数。 30和40 24和20 16和72 3、判断 2 | 4 8 18 2 4 9 4 8和18的最小公倍数是2*24*9 = 432

最小公倍数的求法-学生版

几个自然数的公倍数中最小的一个,叫做这几个数的最小公倍数。求几个数的最小公倍数可用下面几种方法。 一、直接法 1.如果两个数是互质数, 。 例如:12和13互质,它们的最小公倍数就是12×13=156。 2.如果大数是小数的倍数, 。 例如:100是25的倍数,那么大数100就是100和25的最小公倍数。 3.如果两个数相同, 。 说明:这种方法直接简明,方便易行,但只对几个数是否成倍数关系或两两互质的情形适用。 (1)31和47 (2)7和9 (3)49和51 (4)99和99 二、横式分解法(分解质因数法) 先把每个数都分解质因数,然后把它们公有的 和 的质因数连乘起来,相同质因数的个数 教师姓名 学科 数学 上课时间 讲义序号 (同一学生) 学生姓名 年级 五年级 组长签字 日期 课题名称 最小公倍数的求法 例:求14、6、18的最小公倍数。

取得的,所得的积就是它们的最小公倍数。 例如:求8、12和18的最小公倍数。 8、12和18的最小公倍数是:2×2×3×2×3=72。 练习题:求下列各组数的最小公倍数 练:求20、30、42的最小公倍数。

1、36 48 52 2、12 24 32 3、16 24 36 4、21 42 63 三、短除法 1、求两个数的最小公倍数,先用这两个数的公约数连续去除,一直除到所得的商是互质数为止,然后把所有的除数和最后的两个商连乘起来。 例如:求18和63的最小公倍数。 18和63的最小公倍数是:3×3×2×7=126 2、三个数最小公倍数的求法:用短除法求三个数的最小公倍数,与两个数的情形基本相同。只是先要用三个数的公约数去除,直到,再用,直到。然后起来。 例题:求6、30、45的最小公倍数。

最大公约数的算法

. 1、查找约数法. 先分别找出每个数的所有约数,再从两个数的约数中找出公有的约数,其中最大的一个就是最大公约数. 例如,求12和30的最大公约数. 12的约数有:1、2、3、4、6、12; 30的约数有:1、2、3、5、6、10、15、30. 12和30的公约数有:1、2、3、6,其中6就是12和30的最大公约数. 2 更相减损术 《九章算术》是中国古代的数学专著,其中的“更相减损术”可以用来求两个数的最大公约数,即“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。” 翻译成现代语言如下: 第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。 第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。 则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。 其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法。 3、辗转相除法. 当两个数都较大时,采用辗转相除法比较方便.其方法是: 以小数除大数,如果能整除,那么小数就是所求的最大公约数.否则就用余数来除刚才的除数;再用这新除法的余数去除刚才的余数.依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数. 例如:求4453和5767的最大公约数时,可作如下除法. 5767÷4453=1余1314 4453÷1314=3余511 1314÷511=2余292 511÷292=1余219 292÷219=1余73

219÷73=3 于是得知,5767和4453的最大公约数是73. 辗转相除法适用比较广,比短除法要好得多,它能保证求出任意两个数的最大公约数.4、求差判定法. 如果两个数相差不大,可以用大数减去小数,所得的差与小数的最大公约数就是原来两个数的最大公约数.例如:求78和60的最大公约数.78-60=18,18和60的最大公约数是6,所以78和60的最大公约数是6. 如果两个数相差较大,可以用大数减去小数的若干倍,一直减到差比小数小为止,差和小数的最大公约数就是原来两数的最大公约数.例如:求92和16的最大公约数.92-16=76,76-16=60,60-16=44,44-16=28,28-16=12,12和16的最大公约数是4,所以92和16的最大公约数就是4. 5、分解因式法. 先分别把两个数分解质因数,再找出它们全部公有的质因数,然后把这些公有质因数相乘,得到的积就是这两个数的最大公约数. 例如:求125和300的最大公约数.因为125=5×5×5,300=2×2×3×5×5,所以125和300的最大公约数是5×5=25. 6、短除法. 为了简便,将两个数的分解过程用同一个短除法来表示,那么最大公约数就是所有除数的乘积. 例如:求180和324的最大公约数. 因为: 5和9互质,所以180和324的最大公约数是4×9=36. 7、除法法. 当两个数中较小的数是质数时,可采用除法求解.即用较大的数除以较小的数,如果能够整除,则较小的数是这两个数的最大公约数. 例如:求19和152,13和273的最大公约数.因为152÷19=8,273÷13=21.(19和13都是质数.)所以19和152的最大公约数是19,13和273的最大公约数是13.

快速求最小公倍数的四种方法精编版

快速求最小公倍数的四种方法 我们在求最小公倍数时一般用短除法来求的,其实在很多情况下, 求两个数的最小公倍数可以用口算直接求出。下面就给大家介绍四种。 一、两数相乘法。 如果两个数是互质数。那么它们的最小公倍数就是这两个数的乘积。 例如:4和7的最小公倍数就是4×7=28。 二、找大数法。 如果两个数有倍数关系。那么较大的数就是这两个数的最小公倍数。 例如:3和15的最小公倍数就是较大数15。 三、扩大法 如果两数不是互质,也没有倍数关系时,可以把较大数依次扩大2倍、3倍、 ……看扩大到哪个数时最先成为较小数的倍数时,这个数就是这两个数的最小公倍数。 例如:18和30的最小公倍数,就是把30扩大2倍得60,60不是18 的倍数; 再把30扩大3倍得90,90是18的倍数,那么90就是18和30的最小公倍数。 四、两数的乘积再除以两数的最大公约数法。 这个方法虽然比较复杂,但是使用范围很广。 因为两个数的乘积等于这两个数的最大公约数和最小公倍数的乘积。 例如:4和6的最大公约数是2,最小公倍数是12,那么,4×6=2×12。

为了便于口算,我们可以把两个数中的任意一个数先除以它们的最大公约数, 然后再和另一个数相乘。例如:18和30的最大公约数是6, 要求18和30的最小公倍数时,可以先用18除以6得3,再用3和30相乘得90; 或者先用30除以6得5,再用5和18相乘得90。这90就是18和30的最小公倍数。 方法1:把他们的倍数罗列出来找 因为:6的倍数:6、12、18、24、30`````` 10的倍数有:10 、20、30、40`````` 15的倍数有:15、30、45、60、75`````` 所以:6、10、15的最小公倍数是30 方法2:分解质因数 6=2*3 10=2*5 15=3*5 他们的最小公倍数:2*3*5=30 方法3:短除法

matlab最大公约数 三种算法

算法设计与分析 11信本余启盛 118632011004 一、上机目的及内容 1.上机内容 求两个自然数m和n的最大公约数。 2.上机目的 (1)复习数据结构课程的相关知识,实现课程间的平滑过渡; (2)掌握并应用算法的数学分析和后验分析方法; (3)理解这样一个观点:不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。 二、实验原理及基本技术路线图 (1)至少设计出三个版本的求最大公约数算法; (2)对所设计的算法采用大O符号进行时间复杂性分析; (3)上机实现算法,并用计数法和计时法分别测算算法的运行时间; (4)通过分析对比,得出自己的结论。 三、所用仪器、材料(设备名称、型号、规格等或使用软件) 1台PC及VISUAL C++6.0软件matlab .2008 四、实验方法、步骤(或:程序代码或操作过程) 实验采用三种方法求最大公约数 1、连续整数检测法。 2、欧几里得算法 3、蛮力法(短除法) 根据实现提示写代码并分析代码的时间复杂度: 算法一:连续整数检测法。 CommFactor1 输入:两个自然数m和n 输出:m和n的最大公约数 1.判断m和n哪个数小,t=min(m,n) 2.如果m%t==0&&n%t==0 ,结束 2.1 如果t不是m和n的公因子,则t=t-1; 3. 输出t ;

根据代码考虑最坏情况他们的最大公约数是1,循环做了t-1次,最好情况是只做了1次,可以得出O(n)=n/2; 算法二:欧几里德算法 CommFactor2 输入:两个自然数m和n 输出:m和n的最大公约数 1. r = m % n; 2. 循环直到r 等于0 2.1 m = n; 2.2 n = r; 2.3 r = m % n; 3. 输出n ; 根据代码辗转相除得到欧几里得的: O(n)= log n 算法三:蛮力法(短除法) CommFactor3 输入:两个自然数m和n 输出:m和n的最大公约数 1.factor=1; 2.循环变量i从2-min(m,n),执行下述操作: 2.1 如果i是m和n的公因子,则执行下述操作: 2.1.1 factor=factor*i; 2.1.2 m = m / i; n = n / i; 2.2 如果i不是m和n的公因子,则i=i+1; 3. 输出factor; 根据代码考虑最坏情况他们的最大公约数,循环做了i-1次;最好情况是只做了1次,可以得出: O(n)=n/2; MATLAB程序代码: main.m x=fix(rand(1,1000)*1000); y=fix(rand(1,1000)*1000); for i=1:1000 A(i)=CommFactor2(x(i),y(i)); end x=x'; y=y';

求几个数的最小公倍数的方法

求几个数的最小公倍数的方法答案 例1.某中学学生排队,如果每10人一排,多1人,每9人一排,仍多1人,每7人一排,少4人,问这学生至少有451人. 考点:求几个数的最小公倍数的方法. 专题:压轴题. 分析:先根据公倍数的求法得到比10和9的公倍数多1的数,再找到其中比7的倍数少4的数中最小的一个. 解答:解:因为比10和9的公倍数多1的数有:91,181,271,361,451,…,比7的倍数少4的数有:3,10,17,24,31,…,451,…, 所以学生至少有451人. 故答案为:451. 点评:考查了求几个数的最小公倍数的方法,本题关键是求出比10和9的公倍数多1的数,比7的倍数少4的数. 例2.张集小学学前班买来一筐橙子,分给5个人最后余2个,分给7人最后余2个,分给9人也余2个,学前班最少买来多少个橙子? 考点:求几个数的最小公倍数的方法. 专题:约数倍数应用题. 分析:根据分给5个人余2个,分给7人余2个,分给9人也余2个,可知这筐橙子的总个数减去2就是5、7和9的公倍数,要求至少也就是用5、7和9的最小公倍数加上2即可. 解答:解:因为5、7和9三个数两两互质, 所以它们的最小公倍数是它们的乘积,即5×7×9=315, 所以这筐橙子至少有:315+2=317(个); 答:学前班最少买来317个橙子. 点评:解答本题关键是理解:这筐橙子的总个数减去2就是5、7和9的公倍数,求至少有的个数,就用它们的最小公倍数加上2即可. 例3.一次数学竞赛,结果学生中获得一等奖,获得二等奖,获得三等奖,其余获纪念奖.已知参加这次竞赛的学生不满50人,问获纪念奖的有多少人? 考点:求几个数的最小公倍数的方法. 分析:即求在50以内的7、3和2的公倍数,先求出这三个数的最小公倍数,因为这三个数两两互质,这三个数的最小公倍数即这三个数的乘积,然后根据题意,进行选择,判断出参加这次竞赛的学生的人数;然后把参加这次竞赛的学生的人数看作单位“1”, 获纪念奖的人数占参加竞赛人数的(1﹣﹣﹣),继而根据一个数乘分数的意义, 用乘法解答即可. 解答:解:2、3和7的最小公倍数是2×3×7=42, 1

最小公倍数教学设计

最小公公倍数教学设计 一、教学目标 1.掌握公倍数、最小公倍数两个概念. 2.理解求最小公倍数的算理,掌握用分解质因数求最小公倍数的方法.教学重点:建立公倍数和最小公倍数的概念,掌握求两个数最小公倍数的方法. 三、教学难点:理解求两个数最小公倍数的算理. 四、教学过程: 一、活动激趣,理解概念。

师:体育课上我们都报数,今天这节课上也请大家报数(1-30),但是你还要记住自己所报的数是多少。生:报数1、2、3...... 师:请所报数是2的倍数的同学站起来,再请所报数是3的倍数的同学站起来(学生按要求起立后坐下)其他同学从他们起立的次数上看你能发现什么? 生:我发现有同学两次都站起来了。师:报哪些数的同学两次都站起来了? 生:报6、12、18......的同学。

师:报6的同学你能说说你为什么两次都要站起来吗? 生:我报的数6既是2的倍数,又是3的倍数,所以两次都要站起来。师:说的好。6既是2的倍数,又是3的倍数,可以说6是2和3公有的倍数。报12的同学你能说说吗?生:我报的数12也是2和3公有的倍数,所以也要两次都站起来。师:说的有理。这样的数还有吗?生:18、24、30...... 师:像6、12、18等这些数都是2和3公有的倍数,可以简称为是2和3

的公倍数(板书:公倍数)。想一想教学目标 1.掌握公倍数、最小公倍数两个概念. 2.理解求最小公倍数的算理,掌握用分解质因数求最小公倍数的方法. 教学重点:建立公倍数和最小公倍数的概念,掌握求两个数最小公倍数的方法. 教学难点:理解求两个数最小公倍数的算理. 教学过程: 一、活动激趣,理解概念。

求最小公倍数的几种方法

百度文库- 让每个人平等地提升自我! 1 求最小公倍数的几种方法 1、列举法。把两个数的公倍数分别列举出来,然后找出它们的 最小公倍数。如:求6和9的最小公倍数,6的倍数:6、12、18、24、30……,9的倍数:9、18、27、36它们的最小公倍数是18。列举法是最基本的方法。 2、互质法。如果两个数只有公因数1时,它们的最小公倍数就是这两个数的乘积。如:求3和7的最小公倍数,它们只有公因数1,它们的最小公倍数就是3×7=21。 3、倍数法。如果较大数是较小数的倍数,那么它们的最小公倍数就是较大数。如:求12和24的最小公倍数,24是12的倍数,因此它们的最小公倍数就是较大数24。 4、翻倍法。从前面的列举法可以看出,两个数的最小公倍数分别是较大数和较小数的倍数,把较大数进行翻倍(如:扩大到原来的1倍、2倍、3倍……),翻倍后的数如果是较小数的倍数,这个数就是它们的最小公倍数。如:求6和9的最小公倍数,9×1=9,9 不是6的倍数,9×2=18,18是6的倍数。因此,6和9的最小公倍数是18。同样把较小数进行翻倍也可以,6×1=6,6不是9的倍数,6×2=12,12不是9的倍数,6×3=18,18是9的倍数,因此6和9的最小公倍数是18,但较小数翻倍显得有点繁。 5、短除法。除到最后两个商只有公因数1时,再把除数和商连乘起来,就是它们的最小公倍数。3×2×3=18,因此6和9的最小公倍数是18。 6、除以最大公因数法。从前面的短除法中可以看出,最大公因数×最小公倍数=两个数的乘积,即最小公倍数=A×B÷最大公因数=A÷最大公因数×B=B÷最大公因数×A,如:求18和24的最小公

求三个数的最小公倍数的几种方法(-三个数的最小公倍数题

求三个数的最小公倍数的几种常用方法 求三个数的最小公倍数的方法很多,常用的方法有:短除法和分解质因数法。课本上重点介绍了这两种方法,这里我们除了介绍这两种方法外,还将介绍几种常用的方法,供同学们参考。 一、短除法 求三个数的最小公倍数,如果这三个数有公有的质因数,可先用这个公有的质因数连续去除(一般从最小的开始);如果其中的两个数有公有的质因数,可先用它们的公有的质因数去除,并把另外一个数移下来,按照上面的方法继续除下去,直到所得的商两两互质为止,然后把所有的除数和最后的三个商连乘起来,所得的积就是这三个数的最小公倍数。 例1、求15、18、30的最小公倍数 所以,15、18、30的最小公倍数是3×5×2×1×3×1=90 二、分解质因数法 求三个数的最小公倍数,先把这几个数分解质因数,再把它们一切公有的质因数和其中几个数公有的质因数以及每个数的独有的质因数全部连乘起来,所得的积就是它们的最小公倍数。(注意:公有的质因数只能算一次。) 例2、^ 例3、求18,12,20的最小公倍数 将18,12和20分解质因数得 18=2×3×3,12=2×2×3,20=2×2×5,其中三个数的公有的质因数为2,两个数的公有质因数为2与3,每个数独有的质因数为5与3。 所以, 18,12,20的最小公倍数是2×2×3×3×5=180。 短除法和分解质因数法是求几个数的最基本的方法。在解题时可根据特点选择下面的简便的方法 三、互质法 如果三个数两两互质,那么这三个数的乘积就是它们的最小公倍数。 例3. 2、3和13的最小公倍数。 因为2、3和13三个数两两互质,所以它们的最小公倍数是2×3×13=78 四、化简分数,交叉相乘法 化简分数,交叉相乘”,能很快求出几个数的最小公倍数。 例4.求48、72和60的最小公倍数。 、 第一步:化简分数。即把48和72两个数写成真分数或假分数的形式,并化成最

Java算法最大公约数和最小公倍数

Java算法最大公约数和最小公倍数 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。 最大公约数: public class CommonDivisor{ public static void main(String args[]) { commonDivisor(24,32); } static int commonDivisor(int M, int N) { if(N<0||M<0) { System.out.println("ERROR!"); return -1; } if(N==0) { System.out.println("the biggest common divisor is :"+M); return M; } return commonDivisor(N,M%N); } } 最小公倍数和最大公约数: import java.util.Scanner; public class CandC { //下面的方法是求出最大公约数 public static int gcd(int m, int n) {

while (true) { if ((m = m % n) == 0) return n; if ((n = n % m) == 0) return m; } } public static void main(String args[]) throws Exception { //取得输入值 //Scanner chin = new Scanner(System.in); //int a = chin.nextInt(), b = chin.nextInt(); int a=23; int b=32; int c = gcd(a, b); System.out.println("最小公倍数:" + a * b / c + "\n最大公约数:" + c); } }

最大公约数的三种算法复杂度分析时间计算

理工大学信息工程与自动化学院学生实验报告 (2011 —2012 学年第 1 学期) 课程名称:算法设计与分析开课实验室:信自楼机房444 2011 年10月 12日 一、上机目的及容 1.上机容 求两个自然数m和n的最大公约数。 2.上机目的 (1)复习数据结构课程的相关知识,实现课程间的平滑过渡; (2)掌握并应用算法的数学分析和后验分析方法; (3)理解这样一个观点:不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。 二、实验原理及基本技术路线图(方框原理图或程序流程图) (1)至少设计出三个版本的求最大公约数算法; (2)对所设计的算法采用大O符号进行时间复杂性分析; (3)上机实现算法,并用计数法和计时法分别测算算法的运行时间; (4)通过分析对比,得出自己的结论。 三、所用仪器、材料(设备名称、型号、规格等或使用软件) 1台PC及VISUAL C++6.0软件 四、实验方法、步骤(或:程序代码或操作过程) 实验采用三种方法求最大公约数 1、连续整数检测法。

根据实现提示写代码并分析代码的时间复杂度: 方法一: int f1(int m,int n) { int t; if(m>n)t=n; else t=m; while(t) { if(m%t==0&&n%t==0)break; else t=t-1; } return t; } 根据代码考虑最坏情况他们的最大公约数是1,循环做了t-1次,最好情况是只做了1次,可以得出O(n)=n/2; 方法二:int f2(int m,int n) { int r; r=m%n; while(r!=0) { m=n; n=r; r=m%n; } return n; } 根据代码辗转相除得到欧几里得的O(n)= log n 方法三: int f3(int m,int n) { int i=2,j=0,h=0; int a[N],b[N],c[N]; while(i

C语言算法——最大公约数

基本算法——辗转相除法 问题:输出两个正整数a,b,且0 void main() { int a,b, p, q; do{ printf("请输入a和b:\n"); scanf("%d%d",&a,&b); } while ( a<0 || b<0 || a>b); p=a; while( a%p!=0 || b%p!=0) p--; printf("这两个数的最大公约数是%d\n",p); q=b; while( q%a!=0 || q%b!=0) q++; printf("这两个数的最小公倍数是%d\n",q); }

改进——已知整数a,b及其最大公约数p,则直接可推算出最小公倍数q: q= a*b/p; 源程序2 #include void main() { int a,b, p, q; do{ printf("请输入a和b:\n"); scanf("%d%d",&a,&b); } while ( a<0 || b<0 || a>b); p=a; while( a%p!=0 || b%p!=0) p--; printf("这两个数的最大公约数是%d\n",p); q= a*b/p; printf("这两个数的最小公倍数是%d\n",q); } 解法1的缺点:效率低。 例如a=1397, b=2413,其最大公约数p=127,为得到p,共循环了1397-127+1=1171次。如何提高效率?

最大公倍数和最小公倍数求法

一、观察法. 运用能被2、3、5整除的数的特征进行观察. 例如,求225和105的最大公约数.因为225、105都能被3和5整除,所以225和105至少含有公约数(3×5)15.因为225÷15=15,105÷15=7.15与7互质,所以225和105的最大公约数是15. 二、查找约数法. 先分别找出每个数的所有约数,再从两个数的约数中找出公有的约数,其中最大的一个就是最大公约数. 例如,求12和30的最大公约数. 12的约数有:1、2、3、4、6、12; 30的约数有:1、2、3、5、6、10、15、30. 12和30的公约数有:1、2、3、6,其中6就是12和30的最大公约数. 三、分解因式法. 先分别把两个数分解质因数,再找出它们全部公有的质因数,然后把这些公有质因数相乘,得到的积就是这两个数的最大公约数. 例如:求125和300的最大公约数.因为125=5×5×5,300=2×2×3×5×5,所以125和300的最大公约数是5×5=25. 四、关系判断法. 当两个数关系特殊时,可直接判断两个数的最大公约数.例如,两个数互质时,它们的最大公约数就是这两个数的乘积;两个数成倍数关系时,它们的最大公约数就是其中较小的那个数. 五、短除法. 为了简便,将两个数的分解过程用同一个短除法来表示,那么最大公约数就是所有除数的乘积. 例如:求180和324的最大公约数. 因为: 5和9互质,所以180和324的最大公约数是4×9=36. 六、除法法.

当两个数中较小的数是质数时,可采用除法求解.即用较大的数除以较小的数,如果能够整除,则较小的数是这两个数的最大公约数. 例如:求19和152,13和273的最大公约数.因为152÷19=8,273÷13=21.(19和13都是质数.)所以19和152的最大公约数是19,13和273的最大公约数是13. 七、缩倍法. 如果两个数没有之间没有倍数关系,可以把较小的数依次除以2、3、4……直到求得的商是较大数的约数为止,这时的商就是两个数的最大公约数.例如:求30和24的最大公约数.24÷4=6,6是30的约数,所以30和24的最大公约数是6. 八、求差判定法. 如果两个数相差不大,可以用大数减去小数,所得的差与小数的最大公约数就是原来两个数的最大公约数.例如:求78和60的最大公约数.78-60=18,18和60的最大公约数是6,所以78和60的最大公约数是6. 如果两个数相差较大,可以用大数减去小数的若干倍,一直减到差比小数小为止,差和小数的最大公约数就是原来两数的最大公约数.例如:求92和16的最大公约数.92-16=76,76-16=60,60-16=44,44-16=28,28-16=12,12和16的最大公约数是4,所以92和16的最大公约数就是4. 九、辗转相除法. 当两个数都较大时,采用辗转相除法比较方便.其方法是: 以小数除大数,如果能整除,那么小数就是所求的最大公约数.否则就用余数来除刚才的除数;再用这新除法的余数去除刚才的余数.依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数. 例如:求4453和5767的最大公约数时,可作如下除法. 5767÷4453=1余1314 4453÷1314=3余511 1314÷511=2余292 511÷292=1余219 292÷219=1余73 219÷73=3

最大公约数和最小公倍数算法

C语言求最大公约数和最小公倍数算法假设求任意两个整数的最大公约数和最小公倍数,采用函数调用形式进行。 1、辗转相除法 辗转相除法(又名欧几里德法)C语言中用于计算两个正整数a,b的最大公约数和最小公倍数,实质它依赖于下面的定理: a b=0 gcd(a,b) = gcd(b,a mod b) b!=0 根据这一定理可以采用函数嵌套调用和递归调用形式进行求两个数的最大公约数和最小公倍数,现分别叙述如下: ①、函数嵌套调用 其算法过程为:前提:设两数为a,b设其中a 做被除数,b做除数,temp为余数 1、大数放a中、小数放b中; 2、求a/b的余数; 3、若temp=0则b为最大公约数; 4、如果temp!=0则把b的值给a、temp的值给a; 5、返回第第二步; 代码: int divisor (int a,int b) /*自定义函数求两数的最大公约数*/ { int temp; /*定义整型变量*/ if(a

最大公约数和最小公倍数怎么求

最大公约数和最小公倍数怎么求? 首先把两个数的质因数写出来,最小公倍数等于它们所有的质因数的乘积(如果有几个质因数相同,则比较两数中哪个数有该质因数的个数较多,乘较多的次数)。 比如:求45和30的最小公倍数。 45=3*3*5 30=2*3*5 不同的质因数是2,3,5。3是他们两者都有的质因数,由于45有两个3,30只有一个3,所以计算最小公倍数的时候乘两个3. 最小公倍数等于2*3*3*5=90 又如:计算36和270的最小公倍数。 36=2*2*3*3 270=2*3*3*3*5 不同的质因数是5。2这个质因数在36中比较多,为两个,所以乘两次;3这个质因数在270个比较多,为三个,所以乘三次。 最小公倍数等于2*2*3*3*3*5=540 最大公约数和最小公倍数<练习题> 1.有一级茶叶96克,二级茶叶156克,三级茶叶240克,价值相等.现将这三种茶叶分别等分装袋(均为整数克),每袋价值相等,要使每袋价值最低应如何装袋? 2.a、b两数的最大公约数是12,已知a有8个约数,b有9个约数,求a与b. 3.两个数的积是6912,最大公约数是24,求:(1)它们的最小公倍数;(2)满足已知条件的自然数是哪几组? 4.甲、乙、丙三个学生定期向某老师求教,甲每4天去一次,乙每6天去一次,丙每9天去一次,如果这一次他们三人是3月23日都在这个老师家见面,那么下一次三人都在这个老师家见面的时间是几月几日? 5.求被5除余2,被6除余3,被7除4的大于1000、小于1500的所有自然数. 6.某个数与36的最大公约数是12,与36的最小公倍数是180,求这个数. 7.有三个自然数a、b、c,a与b的最大公约数是2;b和c的最大公约数是4;a和c的最大公约数是6;a、b、c三个数的最小公倍数是60,求这三个数的最小的和是多少? 答案仅供参考: 1.三种数量不等的茶叶价值相等,等分装袋后,每袋价值仍相等,由于每种茶叶的总价值相等,每袋价值也要相等,所以这三种茶叶分装的袋数也一定相同.为了使每袋价值最低,就应使袋数尽可能多,

33、最小公倍数法

最小公倍数法 通过计算出几个数的最小公倍数,从而解答出问题的解题方法叫做最小公倍数法。 例1 用长36厘米,宽24厘米的长方形瓷砖铺一个正方形地面,最少需要多少块瓷砖?(适于六年级程度) 解:因为求这个正方形地面所需要的长方形瓷砖最少,所以正方形的边长应是36、24的最小公倍数。 2×2×3×3×2=72 36、24的最小公倍数是72,即正方形的边长是72厘米。 72÷36=2 72÷24=3 2×3=6(块) 答:最少需要6块瓷砖。 *例2 王光用长6厘米、宽4厘米、高3厘米的长方体木块拼最小的正方体模型。这个正方体模型的体积是多大?用多少块上面那样的长方体木块?(适于六年级程度)

解:此题应先求正方体模型的棱长,这个棱长就是6、4和3的最小公倍数。 2×3×2=12 6、4和3的最小公倍数是12,即正方体模型的棱长是12厘米。 正方体模型的体积为: 12×12×12=1728(立方厘米) 长方体木块的块数是: 1728÷(6×4×3) =1728÷72 =24(块) 答略。 例3 有一个不足50人的班级,每12人分为一组余1人,每16人分为一组也余1人。这个班级有多少人?(适于六年级程度) 解:这个班的学生每12人分为一组余1人,每16人分为一组也余1人,这说明这个班的人数比12与16的公倍数(50以内)多1人。所以先求12与16的最小公倍数。

2×2×3×4=48 12与16的最小公倍数是48。 48+1=49(人) 49<50,正好符合题中全班不足50人的要求。 答:这个班有49人。 例4 某公共汽车站有三条线路通往不同的地方。第一条线路每隔8分钟发一次车;第二条线路每隔10分钟发一次车;第三条线路每隔12分钟发一次车。三条线路的汽车在同一时间发车以后,至少再经过多少分钟又在同一时间发车?(适于六年级程度) 解:求三条线路的汽车在同一时间发车以后,至少再经过多少分钟又在同一时间发车,就是要求出三条线路汽车发车时间间隔的最小公倍数,即8、10、12的最小公倍数。 2×2×2×5×3=120 答:至少经过120分钟又在同一时间发车。

C语言求最大公约数和最小公倍数算法

C语言求最大公约数和最小公倍数算法 C语言求最大公约数和最小公倍数可以说是C语言编程学习中一个重点和难点,它常常作为计算机专业学生参加各种考试必须要把握的内容。其算法方面除常用的辗转相除法外、还可以根据数学定义法、递归调用法等。下面结合我学习以来的笔记整理、总结几种常用的方法进行比较,以便能够更好的理解、应用、共勉。 前提:假设求任意两个整数的最大公约数和最小公倍数,采用函数调用形式进行。 1、辗转相除法 辗转相除法(又名欧几里德法)C语言中用于计算两个正整数a,b的最大公约数和最小公倍数,实质它依赖于下面的定理: a b=0 gcd(a,b) = gcd(b,a mod b) b!=0 根据这一定理可以采用函数嵌套调用和递归调用形式进行求两个数的最大公约数和最小公倍数,现分别叙述如下: ①、函数嵌套调用 其算法过程为:前提:设两数为a,b设其中a 做被除数,b做除数,temp为余数 1、大数放a中、小数放b中; 2、求a/b的余数; 3、若temp=0则b为最大公约数; 4、如果temp!=0则把b的值给a、temp的值给a; 5、返回第第二步; 代码: int divisor (int a,int b) /*自定义函数求两数的最大公约数*/ { int temp; /*定义整型变量*/ if(a

c++,使用欧几里得算法计算两个数的最大公约数,分别用递推和递归两种算法实现5

实验九 一、实验内容 教材3.9 定义递归函数实现下面的Ackman函数 n+1 m=0 Acm(m,n)= Acm(m-1,1) n=0 Acm(m-1,Acm(m,n-1)) n>0,m>0 教材3.10 用递归法实现勒让德多项式: 1 n=0 Pn= x n=1 ((2n-1)xPn-1(x)-(n-1)Pn-2(x))/n 教程p24 使用欧几里得算法计算两个数的最大公约数,分别用递推和递归两种算法实现 教程p26 编程:将上题以多文件方式组织,在area.h中声明各个area()函数原型,在area.cpp文件中定义函数,然后在Exp9_2中包含area.h,定义main() 函数并执行。 二、实验目的 1、掌握函数的嵌套调用好递归调用 2、掌握递归算法 3、了解内联函数、重载函数、带默认参函数的定义及使用方法 4、掌握程序的多文件组织 5、掌握编译预处理的内容,理解带参数宏定义与函数的区别 三、实验步骤 教材3.9 定义递归函数实现下面的Ackman函数 n+1 m=0 Acm(m,n)= Acm(m-1,1) n=0 Acm(m-1,Acm(m,n-1)) n>0,m>0 教材3.10用递归法实现勒让德多项式: 1 n=0 Pn= x n=1 ((2n-1)xPn-1(x)-(n-1)Pn-2(x))/n 教程p24 使用欧几里得算法计算两个数的最大公约数,分别用递推和递归两种算法实现 教程p26 编程:将上题以多文件方式组织,在area.h中声明各个area()函数原型,在area.cpp文件中定义函数,然后在Exp9_2中包含area.h,定义main() 函数并执行。 四、实验数据及处理结果

最大公因数和最小公倍数知识点归纳

【记忆背诵要点】家长签字:姓名:注意:每一个分数无论题目要求没,要约分后才能作为最后的结果。 一:约分的方法: 1、先找到分子,分母的最大公因数; 2、利用分数的性质约去最大公因数; 3、化成最简分数。(即不能再约分为止) 二:比较分数大小的方法: 1、分别对每个分数进行约分(或者通分),变成 同分母分数, 或者变成同分子分数; 2、比较化简后的两个分数的大小; 3、比较原数的大小。 三:弄清互质的几种情况 互质:两个数的最大公因数为1就叫做这两个数互质。 1.两个连续自然数是互质的。例如:8与9;15与16 2.两个质数必然是互质的。例如:5和7;11和13 3.一个质数和不是它倍数的合数。例如:5和14;3和8 4.尽管两个数都是合数,但一个是2或3的倍数,另一个数 是7或5的倍数。例如:15和8,21和10 四:求最大公因数或最小公倍数的方法: 1.若两个数是互质的,则最大公因数为1, 最小公倍数为这两个数的乘积。

2.若两个数是倍数关系,则较小的数为它们的最大 公因数,较大的数为它们的最小公倍数。当两个数相差 较大时,要判断大数是否为小数的倍数。例如:13与 26,39,52,65,78;14与28,42,56,70,84;17 与34,51等等。以上两种情况不需要用分解质因数的 方法。 3.两个数不是倍数关系的,也不是互质的才适合用 分解质因数去求最大公因数和最小公倍数。 五:应用题中如何识别是求公因数还是公倍数的方法 1.分析题意,判断结果应该比所给数量大,则是求公倍数; 2.分析题意,判断结果应该比所给数量小,则是求公因数; 3.题目中含“最多”或“最长”等字眼,则是求最大公因数; 4.题目中含“至少”,“下一次”字眼,则是求最小公倍数; 【认真练习】1.填空 75和15 16和30 77和44 6和10 13和91 21和35 12和18 3和14 最大公因数 最小公倍数 2.比较大小:(1)和(2)和

相关文档
最新文档