求两个数的最大公约数

下面用两种方法求两个数的最大公约数
第一种,用递减循环从较小的数开始到0依次查找能同时整除两个数的数,则这个数就为这两个数的最大公约数,代码如下


#include<stdio.h>
#include<stdlib.h>
int main()
{
 int a = 0;
 int b = 0;
 int tmp = 0;
 int i = 0;
 printf("请输入两个数:");
 scanf("%d%d", &a, &b);
 if (a < b)        //将两个数中较小的数赋给变量tmp
 {
  tmp = a;
 }
 else
 {
  tmp = b;
 }
 for (i = tmp; i > 0; i--) 
 {
  if (a%i == 0 && b%i == 0)
  {
   printf("最大公约数为:%d\n", i);
   break;
  }
  
 }
 
 system("pause");
 return 0;
}

第二种方法,辗转相除法,代码如下
#include<stdio.h>
#include<stdlib.h>
int main()
{
 int a = 24;
 int b = 15;
 int tmp = 0;
 //辗转相除法
 while (a%b)      //当a%b为真即a%b不为0时,进入循环体,当a%b为假时即a%b为0时不进入循环体,此时b就是最大公约数
 {
  tmp = a%b;     //将a%b的值赋给tmp
  a = b;         //将b的值赋给a
  b = tmp;       //将tmp的值赋给b,下次循环的条件就是a%b即b%tmp
 }
 printf("最大公约数:%d\n", b);
 system("pause");
 return 0;
}

下面是对第二种方法辗转相除法的一点小小的优化

#include<stdio.h>
#include<stdlib.h>
int main()
{
 int a = 24;
 int b = 15;
 int tmp = 0;
 //辗转相除法
 while (tmp=a%b)      //    将条件与赋值写为一个式子,可以减少一次计算。当a%b为真即a%b不为0时,进入循环体,当a%b为假时即a%b为0时不进入循环体,此时b就是最大公约数
 {
  a = b;         //将b的值赋给a
  b = tmp;       //将tmp的值赋给b,下次循环的条件就是a%b即b%tmp
 }
 printf("最大公约数:%d\n", b);
 system("pause");
 return 0;
}




附加彩蛋:最小公倍数=两个数的乘积/最大公约数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值