使用4种算法计算两个数的最大公约数(辗转相除法,穷举法,更相减损法,Stein算法)

您所在的位置:网站首页 c语言中的temp 使用4种算法计算两个数的最大公约数(辗转相除法,穷举法,更相减损法,Stein算法)

使用4种算法计算两个数的最大公约数(辗转相除法,穷举法,更相减损法,Stein算法)

2023-03-21 20:47| 来源: 网络整理| 查看: 265

一、题目分析:求两个数的最大公约数,设计求最大公约数的算法并使这两个数据调用求最大公约数的函数,得到最大公约数的值。 二、算法分析: 1.辗转相除法 辗转相除法(又名欧几里德法)C语言中用于计算两个正整数a,b的最大公约数和最小公倍数,实质它依赖于下面的定理: 在这里插入图片描述 根据这一定理可以采用函数嵌套调用和递归调用形式进行求两个数的最大公约数和最小公倍数,现分别叙述如下: 其算法过程为: 前提:设两数为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 printf(“第%d组数据为:\t”,k/2+1); shuju[k]=rand()%100+1; printf("%d\t",shuju[k++]); shuju[k]=rand()%100+1; printf("%d\n",shuju[k++]); } 使用随机生成20组数据进行测试并计算程序运行的时间: 在这里插入图片描述 使用辗转相除法测试计算20组数据最大公约数的时间为0.007秒 在这里插入图片描述 使用穷举法测试计算20组数据最大公约数的时间为0.017秒 在这里插入图片描述 使用用更相减损法测试计算20组数据最大公约数的时间为0.018秒 在这里插入图片描述 使用Stein算法测试计算20组数据最大公约数的时间为0.017秒 在这里插入图片描述 根据结果显示在计算20组数据最大公约数时使用辗转相除法是耗时最短的为0.007秒,而更相减损法是耗时最长的为0.018秒。 使用随机生成40组数据进行测试并计算程序运行的时间: 在这里插入图片描述 使用辗转相除法测试计算40组数据最大公约数的时间为0.019秒

在这里插入图片描述 使用穷举法测试计算40组数据最大公约数的时间为0.029秒 在这里插入图片描述 使用更相减损法测试计算40组数据最大公约数的时间为0.03秒 在这里插入图片描述 使用Stein算法测试计算40组数据最大公约数的时间为0.027秒 在这里插入图片描述 根据结果显示在计算40组数据的最大公约数时使用辗转相除法耗时最短为0.019秒,而使用更相减损法耗时最长为0.03秒。 使用随机生成60组数据进行测试并计算程序运行的时间: 在这里插入图片描述 使用辗转相除法测试计算60组数据最大公约数的时间为0.027秒 在这里插入图片描述 使用穷举法测试计算60组数据最大公约数的时间为0.054秒 在这里插入图片描述 使用更相减损法测试计算60组数据最大公约数的时间为0.052秒 在这里插入图片描述 使用Stein算法测试计算60组数据最大公约数的时间为0.047秒 在这里插入图片描述 根据结果显示在计算60组数据最大公约数时使用辗转相除法耗时最短为0.027秒,而使用穷举法耗时最长为0.054秒。 在使用辗转相除法分别计算20、40、60组数据最大公约数时耗时分别为0.007秒、0.019秒、0.027秒,平均时间为(0.007+0.019+0.027)/3=0.0177秒。 在使用穷举法分别计算20、40、60组数据最大公约数时耗时分别为0.017秒、0.029秒、0.054秒,平均时间为(0.017+0.029+0.054)/3=0.0333秒。 在使用更相减损法分别计算20、40、60组数据最大公约数时耗时分别为0.018秒、0.03秒、0.052秒,平均时间为(0.018+0.03+0.052)/3=0.0333秒。 在使用Stein算法分别计算20、40、60组数据最大公约数时耗时分别为0.017秒、0.027秒、0.047秒,平均时间为(0.017+0.027+0.047)/3=0.0303秒。 分析可得在4种计算最大公约数的算法中,辗转相除法耗时是相对最少的,而另外三种算法(穷举法、更相减损法、Stein算法)耗时相近且相对较长。 五、经验归纳 在编写程序时遇到了一些困难:出现了一些乱码,程序无限循环不能正常运行,条件选择出现错误执行等等。最后都慢慢修改得到解决,并有以下总结: 1.在编写程序代码时使用循环语句和条件选择语句的时候很容易出错,要么无限循环,要么是无法完成预期的功能,所以在编写循环语句的时候可以在语句中添加中间变量用于查看哪里出现了错误,程序完成之后可以直接在中间变量部分加上注释,方便理解也不会对程序运行结果产生负面影响。 2.在编写scanf()函数时,忘记变量前面的取地址符&或者判等时少写一个等号 ,导致程序出现乱码,以后编写程序时应该细心,少出现这种低级错误。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3