13,25,130用辗转相除法求最大公约数数

(屁米屁米啊)
(欧洲晴明桑)
第三方登录:Scratch教程
当前位置: &
你会用Scratch求最大公约数吗
导读:通过学习Scratch,孩子们能够学会解决数学中和我们日常生活中的一些简单问题,比如最大公约数问题,你会用Scratch求最大公约数吗?一起跟随南京小码王Scratch培训班老师学习一下。
Scratch是目前比较火热的一款少儿编程工具,但很多孩子没有经过系统学习的话,是无法完全掌握Scratch的功能和用法的。Scratch结合了孩子喜欢的图形、动画、音效、游戏等,为编程增加了更大的乐趣,通过学习Scratch,孩子们能够学会解决数学中和我们日常生活中的一些简单问题,比如最大公约数问题,你会用Scratch求最大公约数吗?一起跟随南京小码王老师学习一下。有两个自然数a和b,如果a能被b整除,那么,b就叫做a的约数。两个或多个自然数的共有约数中最大的一个,叫做它们的最大公约数,也称最大公因数、最大公因子。求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、辗转相减法、更相减损法等。【问题】输入两个正整数a和b,求它们的最大公约数。【Scratch编程解题】下面将分别介绍使用辗转相除法、更相减损法来求两个数的最大公约数。一、辗转相除法辗转相除法的算法步骤是,对于给定的两个正整数a、b(a&b),用a除以b得到余数c。若余数c不为0,就将b和c构成新的一对数(a=b,b=c),继续上面的除法,直到余数c为0,这时b就是原来两个数的最大公约数。因为这个算法需要反复进行除法运算,故被形象地命名为“辗转相除法”。举例说明,用辗转相除法求255和75的最大公约数。给定两个数:255,75;第一次:用255除75,余30;第二次:用75除30,余15;第三次:用30除15,余0;这时就得到255和75的最大公约数是15。辗转相除法的算法用流程图表示。注:a mod b,即a除以b的余数。根据上面的算法步骤,我们编写一个名为“辗转相除法”的模块,用来求两个数的最大公约数。该模块的完整代码如下:下面编写调用“辗转相除法”模块的主程序,用来求255和75的最大公约数。主程序的代码如下:点击绿旗运行程序,求得255和75的最大公约数是15。二、更相损减法更相损减法的算法步骤:第一步:任意给定两个正整数,判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的差和减数相等为止。第三步:最后把第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。这里所说的“等数”,就是最大公约数,求“等数”的办法就是“更相减损法”,所以,更相减损法也叫等值算法。举例说明,用更相减损术求260和104的最大公约数。第一步:由于260和104均为偶数,首先用2约简得到130和52,再用2约简得到65和26;第二步:此时65是奇数,而26不是奇数,故把65和26辗转相减:65-26=39,39-26=13,26-13=13;第三步:最后把第一步中约掉的两个2和“等数”13相乘:13×2×2=52所以,260与104的最大公约数是52。我们把更相减损法的算法用流程图表示:注:GCD,即最大公约数。根据上面的算法步骤,我们编写一个名为“更相减损法”的模块,用来求两个数的最大公约数。该模块的完整代码如下:下面编写调用“更相减损法”模块的主程序,用来求260和104的最大公约数。主程序的代码如下:点击绿旗运行程序,求得260和104的最大公约数是52。其实没那么复杂对不对?只要了解了算法和步骤,就能轻松编写出代码和程序,而Scratch中还有完整的代码块,可大大缩减编程难度。如果你对Scratch编程还有什么疑问,或者想获得更多有趣的的话,都可以直接咨询小码王在线老师,也欢迎你来小码王Scratch培训班免费试听课程,感受编程的乐趣。求最大公约数的几种方法
时间: 03:15:24
&&&& 阅读:402
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
不多说,直接粘程序:
#include "stdafx.h"
#include &iostream&
using namespace
#include&time.h&
#include&math.h&
const int Max = 10;
//采用连续整数检测
利用求最大公约数的性质解题,有点意思。
void gcd1(int a, int b)
int count = 0;
if (a%t == 0)
if (b%t==0)
t = t - 1;
t = t - 1;
cout && "采用连续整数检测算法输出的结果是:"&&
cout && "输出最大公约数是:"&& t &&
cout && "最大迭代次数是:"&& count &&
//采用欧几里得算法
又叫辗转相除算法
void gcd2(int a, int b)
int r = a %
int count = 0;
while(r != 0)
cout && "采用欧几里得算法输出的结果是:"&&
cout && "输出最大公约数是:"&& b &&
cout && "最大迭代次数是:"&& count &&
//采用分解质因数法
void gcd3(int a, int b)
int x[Max]={0},y[Max]={0},z[Max]={0};
int count1 = 0, count2 = 0, count3 = 0, count = 0;
// 将a分解质因数,并将质因数放入x数组中
for (int i = 2; i&=a/2; i++)//从2一直往下试
while(a != i )
if (a%i == 0)
x[count1] =
x[count1] =
// 将b分解质因数,并将质因数放入y数组中
for (int i = 2; i&=b/2; i++)//从2一直往下试
while(b != i )
if (b%i == 0)
y[count2] =
y[count2] = 102:
int key = 0; 103:
//在两个数组中寻找相同的元素的算法中,采取控制变量法,保持一个数组不变,用 104:
//另一个数组中的每一个值与第二个数组中的值一个个比较,相同的保存到z中。 105:
for (int m=0; m &= count1; m++) 106:
key = x[m]; 108:
count++; 109:
for (int n=0; n &= count2; n++) 110:
if (key==y[n]) 112:
z[count3] = 115:
break; 117:
int max = 1; 121:
for (int j = 0; j & count3; j++) //这里不要用 &= 不然,会出错。上面的count最后的数字有具体的值,此数组中对应的数据为0
max = max * z[j]; 124:
count++; 125:
cout && "采用分解质因数算法输出的结果是:"&& 127:
cout && "输出最大公约数是:"&& max && 128:
cout && "最大迭代次数是:"&& count && 129:
int main() 133:
while(1) 135:
clock_t start, 137:
int a,b; 138:
cout && "请输入所要求最大公约数的两个数值:" && 139:
scanf("%d,%d",&a,&b); 140:
if (a & b) 141:
int temp = 143:
start = clock(); 147:
gcd1(a,b); 148:
stop = clock(); 149:
cout && "执行时间是:"&& stop - start && 150:
start = clock(); 152:
gcd2(a,b); 153:
stop = clock(); 154:
cout && "执行时间是:"&& stop - start && 155:
start = clock(); 157:
gcd3(a,b); 158:
stop = clock(); 159:
cout && "执行时间是:"&& stop - start && 160:
return 0; 162:
实验结果:
实验总结:
方法一当中,根据代码考虑最坏情况他们的最大公约数是1,循环做了t-1次,最好情况是只做了1次,可以得出O(n)=n/2;方法二当中,根据代码辗转相除得到欧几里得的O(n)= log n
方法三当中,根据代码分解质因子算法O(n)=n2+n/2
但从我的实验结果来看,从时间复杂度来看,欧几里得算法的是最优算法,分解质因数算法其次,最后是连续整除法。从执行次数来看,欧几里得算法的是最优算法,连续整除法其次,最多的是分解质因数算法。再从代码运行的计数器和计算的时间来看,从执行次数上来分析,与理论分析结果一致,但从时间复杂度来看,结果不太一致。但我们可以得出结论的是:欧几里得算法最优。
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:http://www.cnblogs.com/zhuxuekui/p/3596829.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!13的最小倍数 完美作业网 www.wanmeila.com
13的最小倍数是多少( )最大因数是多少( ) 答案:13、13因数 一个数的因数的个数是有限的,其中最小的因数是1,最大的因数是它本身。倍数 一个数的倍数的个数是无限的,最小的倍数是它本身,没有最大的倍数。
12和13的最小公倍数是多少 因为12和13是互质数所以12x13=156是它们的最小公倍数
14和13的最大公因数和最小公倍数 可以用列举法:14的公因数:1,14,2,713的公因数:1,13由此可得出:14和13的最大公因数是114的公倍数:14,28,42,56,70......182......13的公倍数:13,26,39,52,65,78......182......由此可得出:14和13的最小公倍数是182如果觉得麻烦,也可以用短除法1 14 13————14 1314*13=18214和13的最大公因数是1,最小公倍数是182。还有一个概念:当两数成互质关系时,它们的最小公倍数是这两个数的积。回答完毕,谢谢大家!
六和十三的最小公倍数 两个或多个整数公有的倍数叫做它们的公倍数。两个或多个整数的公倍数里最小的那一个叫做它们的最小公倍数。整数a,b的最小公倍数记为[a,b],同样的,a,b,c的最小公倍数记为[a,b,c],多个整数的最小公倍数也有同样的记号。与最小公倍数相对应的概念是最大公约数,a,b的最大公约数记为(a,b)。关于最小公倍数与最大公约数,我们有这样的定理:(a,b)[a,b]=ab(a,b均为整数)因为6和13的最大公约数是1,所以他们的最小公倍数就是13*6=78
13和19的最小公倍数是多少 13和19的最小公倍数是多少13x19=247
一个数的最小倍数是13,这个数是多少 13
12.5和13的最小公倍数是多少 最小公倍数是针对正整数说的。
2和13的最小公倍数 2 和13的最小公倍数:26希望帮到你 望采纳 谢谢 加油
15和11和13的最小公倍数是什么? 2145 - -
13和10的最小公倍数是什么 130当前位置:
>>>求出下面各数的最大公约数和最小公倍数。36,12和9;22,77和121..
求出下面各数的最大公约数和最小公倍数。&36,12和9;&&& &22,77和121;&&& 52,78和130;& &&&10,16和30
题型:计算题难度:中档来源:不详
(36,12,9)=3,&&&& & [36,12,9]&=36;&&&&&(22,77,121)&=11,&&&&[22,77,121]&=1694;&(52,78,130)=26, [52,78,130]&=780;(10,16,30)&=2,&&&&&& [10,16,30]&=240
马上分享给同学
据魔方格专家权威分析,试题“求出下面各数的最大公约数和最小公倍数。36,12和9;22,77和121..”主要考查你对&&最大公因数(最大公约数),最小公倍数&&等考点的理解。关于这些考点的“档案”如下:
现在没空?点击收藏,以后再看。
因为篇幅有限,只列出部分考点,详细请访问。
最大公因数(最大公约数),最小公倍数
最大公因数(最大公约数):任何两个自然数都有公因数1,(除零以外)公因数中(几个)最大的称为最大公因数;最小公倍数:在两个或两个以上的自然数中,如果他们有相同的倍数,这些倍数中,最小的称为这些整数的最大公倍数。最大公约数的求法:(1)用分解质因数的方法,把公有的质因数相乘。(2)用短除法的形式求两个数的最大公约数。(3)特殊情况:如果两个数互质,它们的最大公约数是1。如果两个数中较小的数是较大的数的约数,那么较小的数就是这两个数的最大公约数。最小公倍数的方法:(1)用分解质因数的方法,把这两个数公有的质因数和各自独有的质因数相乘。(2)用短除法的形式求。(3)特殊情况:如果两个数是互质数,那么这两个数的积就是它们的最小公倍数。如果两个数中较大的数是较小的数的倍数,那么较大的数就是这两个数的最小公倍数。
发现相似题
与“求出下面各数的最大公约数和最小公倍数。36,12和9;22,77和121..”考查相似的试题有:
109461010244685872229349207691980958}

我要回帖

更多关于 c++求最大公约数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信