验报告
2020年4月19日
1
算法分析与设计求最大公约数问题实
算法设计与分析
实验报告书
实验名称: 算法设计与分析之实验一
------ 求两个数的最大公约数
学 号: 210890 姓 名: 王朔
评语: 成绩: 指导教师: 批阅时间: 年 月 日文档仅供参考,不当之处,请联系改正。
一 实验目的和要求
(1) 复习上课所讲的内容;
(2) 掌握并应用算法的数学分析和后验分析方法;
(3) 理解这样一个观点:不同的算法能够解决相同的问题,这些算
法的解题思路不同,复杂程度不同,解题效率也不同。
(4) 至少设计出三个版本的求最大公约数算法; (5) 上机实现算法,并用测算三种算法的运行时间; (6) 经过分析对比,得出自己的结论。
二 实验内容
设计三种算法求两个自然数 m 和 n 的最大公约数,并分析每种算法运行所需时间.
三 实验环境
PCWin7系统 , VISUALC++6.0
四 设计思想及实验步骤
1.欧几里得辗转相除算法: ①输入两个正整数m,n(m>n);
②求出两个数的最大值Max和最小值Min; ③计算Max除以Min所得的余数r;
1
2020年4月19日
文档仅供参考,不当之处,请联系改正。
④Max=Min,Min=r;
⑤若r=0,则m,n的最大公约数等于Max;否则转到②; ⑥输出最大公约数Max。
2.蛮力法算法:
①输入两个正整数m,n;
②令常量factor = 1;循环变量i从2~min(m,n); ③如果i是m和n的公因子,则执行④; ④factor = factor*i; m = m/i; n = n/i;
⑤如果i不是m和n的公因子,则i = i +1; ⑥输出factor;
3.欧几里得减法算法: ①输入两个正整数a,b;
②求出两个数的最大值Max和最小值Min; ③若Max等于Min,转到⑥; ④把Max-Min的差赋予r;
⑤如果Min>r,那么把Min赋给Max,把r赋给Min;否则把r赋给Max,执行③;
⑥输出最大公约数Min。
2020年4月19日
2
文档仅供参考,不当之处,请联系改正。
测试三种算法,在例举数的范围内产生随机数,且在每个范围内运行1000次,求出所需总时间,最后输出计算每种算法平均执行一次所需的时间。
六 核心源代码
// 210890王朔.cpp : Defines the entry point for the console application.//
#include \
#include \ #include \ #include \ #include \
int CommFactor1(int m,int n); int CommFactor2(int m,int n); int CommFactor3(int m,int n);
int main(int argc, char* argv[])
2020年4月19日
3