淡泊明志 宁静致远
分类: C/C++
2006-11-06 08:46:44
方法一:
int GYS(int m,int n)
{
int r,t;
if(m < n)
{
t = m;
m = n;
n = t;
}
while( 1)
{
r = m % n;
if(r == 0)
return n;
m = n;
n = r;
}
}//这是最常见的一种解法。
方法二:
int GYS(int m,int n)
{
int t;
if(m < n)
{
t = m;
m = n;
n = t;
}
while( 1)
{
m = m % n;
if(m == 0)
return n;
n = n % m;
if(n == 0)
return m;
}
}//这个是利用连续取余来代替普通的赋值运算
所有的这两个算法的思想均来自于欧几里得算法。
下面还有一个算法是假设两个数字m、n的最大公约数是d,
那么求解am+bn=d中的a、b、d。
int GYS_Coefficient(int m,int n)
{
int a, b ,a1,b1,c,d,t,r,q;
a1 = 1;
b = 1;
a = 0;
b1 = 0;
//c = m; d = n;
while( 1)
{
q = m /n;
/********************/
r = m - q * n; // r = m % n ;
if(r == 0)
{
printf("a = %d\n",a);
printf("b = %d\n",b);
return n;
}
m = n ;
n = r;
/********************/
t = a1;
a1 = a;
a = t-q*a;