//复习实验1
// 求两个整数的最大公约数
//1.连续整除法 m n
//2.欧几里得算法 m n
//3.相减法 m n
#include<stdio.h>
using namespace std;
int commFactor1(int m,int n)//1.连续整除法,实质就是遍历,从2,一个一个尝试
{
int i,factor=1;
for(i=2;i<=m && i<=n;i++)
{
while(m%i==0 && n%i==0)
{
factor =factor*i;
m=m/i;
n=n/i;
}
}
return factor;
}
int commFactor2(int a, int b) //2.欧几里得算法(辗转相除法) 被除数/除数=商....余数
//用较大的数除以较小的数,取余数,余数为0则最大公因数为除数 余数不为0,则用余数和较小的数 重复上述操作,直到余数为0,取此时的除数为最大公因数
{
if (a >= b){
int r = a%b;
if (r == 0)
return b;
else
commFactor2(b, r);
}
else
commFactor2(b, a);
}
int commFactor3(int m,int n)//相减法 被减数-减数=差 如果差==减数,则差即为最大公因数,若不相等,则在用减数和差重复上述操作直到差==减数为止。
{
int t;
if(m<n){
t = m;
m = n;
n = t;
}
if(m==n){
return m;
}else{
return commFactor3(m-n,n);
}
}
int main()
{
int a,b;
printf("请输入两个正整数:");
scanf("%d%d",&a,&b);
int f=commFactor1(a,b);
int s=commFactor2(a,b);
int l=commFactor3(a,b);
printf("整除法----最大公因数为:");
printf("%d",f);
printf("\n");
printf("欧几里得法(辗转相除法)----最大公因数为:");
printf("%d",s);
printf("\n");
printf("相减法(更相减损术)----最大公因数为:");
printf("%d",l);
}