算法分析与设计求最大公约数问题实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法分析与设计求最大公约数问题实
验报告
算法设计与分析
实验报告书
实验名称:算法设计与分析之实验一 ------ 求两个数的最大公约数
学号: 210890
姓名:王朔
一实验目的和要求
(1)复习上课所讲的内容;
(2)掌握并应用算法的数学分析和后验分析方法;
(3)理解这样一个观点:不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。
(4)至少设计出三个版本的求最大公约数算法;
(5)上机实现算法,并用测算三种算法的运行时间;
(6)经过分析对比,得出自己的结论。
二实验内容
设计三种算法求两个自然数 m 和 n 的最大公约数,并分析每种算法运行所需时间.
三实验环境
PCWin7系统 , VISUALC++6.0
四设计思想及实验步骤
1.欧几里得辗转相除算法:
①输入两个正整数m,n(m>n);
②求出两个数的最大值Max和最小值Min;
③计算Max除以Min所得的余数r;
④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。
测试三种算法,在例举数的范围内产生随机数,且在每个范围内运行1000次,求出所需总时间,最后输出计算每种算法平均执行一次所需的时间。
六核心源代码
// 210890王朔.cpp : Defines the entry point for the console application. //
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "windows.h"
int CommFactor1(int m,int n);
int CommFactor2(int m,int n);
int CommFactor3(int m,int n);
int main(int argc, char* argv[])