求两个数的最大公约数
【最小公倍数:两个数相乘除以最大公约数】
法二(辗转相减法)
法3(辗转相除法)
法1:
int CommonDivision(int x, int y)
{
int min = x > y ? y : x;
while (min > 1)
{
if (y%min == 0&&x%min==0)
{
break;
}
min--;
}
return min;
}
int main()
{
int x = CommonDivision(32, 24);
printf("%d\n", x);
system("pause");
return 0;
}
法二(辗转相减法):
(解析:假设两个数的公约数是T
则每个数都由若干个T组成,两个数相减也是由若干个T 组成,
将差值付给较大数的变量,继续判断若不相等,继续求差值赋值,
当两个数相等时,说明两个数相等且等于T。)
int CommonDivision(int x, int y)
{
while (1)
{
if (x > y){
x = x - y;
}
else if (y > x){
y = y - x;
}
else{
break;
}
}
return x;
}
int main()
{
int x = CommonDivision(32, 24);
printf("%d\n", x);
system("pause");
return 0;
}
法3(辗转相除法):
(解析:假设两个数的公约数是T,
则每个数都由若干个T组成,[nx+my的值也能整除T]
x>y -> x/y=z…n -> x=yz+n -> x-zy=n能整除T)
int CommonDivision(int x, int y)
{
while (x*y!=0)
{
if (x > y)
{
x %= y;
}
else if (y > x)
{
y %= x;
}
else
{
return x;
}
}
return x == 0 ? y : x;
}
int main()
{
int x = CommonDivision(32, 24);
printf("%d\n", x);
system("pause");
return 0;
}