一、实验名称:求2个数的最大公约数
二、实验内容:利用辗转相除法、更相损减法、穷举法、Stein算法求两个数的最大公因数。并且比较这四种算法的运行时间。
三、算法设计和代码部分
1、辗转相除法
辗转相除法(又名欧几里德法)C语言中用于计算两个正整数a,b的最大公约数和最小公倍数,实质它依赖于下面的定理:
a b=0
gcd(a,b) =
gcd(b,a mod b) b!=0
其算法过程为: 前提:设两数为a,b设其中a 做被除数,b做除数,c为余数
1、大数放a中、小数放b中;
2、求a/b的余数;
3、若c=0则b为最大公约数;
4、如果c!=0则把b的值给a、c的值给a;
5、返回第二步;
代码:
#include
int main()
{
int a=0;
int b=0;
int c=0;
printf(“辗转相除法\n”);
printf(“请输入第一个数:\n”);
scanf("%d",&a);
printf(“请输入第二个数:\n”);
scanf("%d",&b);
while(a%b!=0)
{
c=a%b;
a=b;
b=c;
}
printf("最大公约数为%d",b);
return 0;
}
辗转相除法算法流程图:
2、更相损减法
更相减损术,是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。《九章算术》是中国古代的数学专著,其中的“更相减损术”可以用来求两个数的最大公约数,即“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。”
翻译成现代语言如下:
第一步:任意给定两个