算法分析与设计求最大公约数问题实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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[])

相关文档
最新文档