/*
题目:求解最大公约数
专业:软件工程1501班
姓名:陈辉
学号:1508010131
*/
#include<stdio.h>
#include<windows.h>
/* 辗转相除法 */
int Common_1(long a,long b)
{
int Remain;
if(a>=b)
{
Remain=a%b;
if(!Remain)
return b;
Remain=Common_1(b,Remain);
}
else
{
Remain=b%a;
if(!Remain)
return a;
Remain=Common_1(a,Remain);
}
}
/* 辗转相减法 */
int Common_2(long a,long b)
{
int Differ;
if(a>=b)
{
Differ=a-b;
if(!Differ)
return b;
Differ=Common_2(b,Differ);
}
else
{
Differ=b-a;
if(!Differ)
return a;
Differ=Common_2(a,Differ);
}
}
/* 穷举法 */
int Common_3(long a,long b)
{
int Divisor[300];
int j=0;
int p=0;
if(!(a%b)||!(b%a))
{
if(a>b)
return b;
else
return a;
}
for(int i=1;i<=b/2;i++,j++)
if(!(b%i))
Divisor[j]=i;
for(;;j--)
{
if(!(a%(Divisor[j])))
{
return Divisor[j];
break;
}
}
}
/* Stein */
int Common_4(long *a,long *b)
{
return 0;
}
int main(void)
{
long a,b;
printf("输入两个整数求他们的最大公寓数(输入0,0停止该程序):\n");
while(1)
{
scanf("%d %d",&a,&b);
if(!a||!b)
break;
printf("辗转相除法求得最大公约数为 %d\n相减法求得去最大公约数为 %d\n穷举法求得最大公约数为 %d\n",Common_1(a,b),Common_2(a,b),Common_3(a,b));
} return 0;
}