求两个数的最大公约数

求两个数的最大公约数
【最小公倍数:两个数相乘除以最大公约数】
法二(辗转相减法)
法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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值