一、题目分析:
我们有很多计算两个正整数的最大公约数的算法,比如辗转相除法,穷举法,更相减损法,Stein算法等,而我们就是要寻找一个解决问题的最佳方法,所以,我们今天用以上四种方法同时求不同规模测试数据的情况下的平均运行时间,从而比较四种算法的时间优越性。
二、算法构造(用流程图表示)
1、辗转相除法:
2、穷举法(用数学定义):
3、更相减损法:
4、Stein算法
二、算法实现
/*计算四种不同求最大公约数的算法平均运行时间*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
//辗转相除法
int divisor1 (int a,int b) /*自定义函数求两数的最大公约数*/
{
int temp;
if(a<b) /*通过比较求出两个数中的最大值和最小值*/
{ temp=a;a=b;b=temp;} /*设置中间变量进行两数交换*/
while(b!=0) /*通过循环求两数的余数,直到余数为0*/
{
temp=a%b;
a=b; /*变量数值交换*/
b=temp;
}
return (a); /*返回最大公约数到调用函数处*/
}
//穷举法
int divisor2 (int a,int b) /*自定义函数求两数的最大公约数*/
{
int temp; /*定义义整型变量*/
{
temp=(a>b)?b:a; /*采种条件运算表达式求出两个数中的最小值*/
while(temp>0)
{
if (a%temp==0&&b%temp=