最大公约数 最小公倍数 函数

#include <stdio.h>

int gcd(int a,int b)//求最大公约数
{
 if(a%b==0)
  return b;
  else{
 return gcd(b,a%b);
}
}
int main()
{
 int a,b;

 scanf("%d%d",&a,&b);

 printf("最大公约数:%d\n",gcd(a,b));
 printf("最小公倍数:%d\n",a*b/gcd(a,b));

 return 0;
}

 

### 实现最大公约数最小公倍数函数 对于解两个整数的最大公约数(GCD)最小公倍数(LCM),可以采用欧几里得算法来高效地解决问题。该方法不仅适用于两个数的情况,还可以扩展到处理多个数值。 #### 使用欧几里得算法计算最大公约数 欧几里得算法是一种高效的迭代或递归方式来找到两数间的最大公约数。其原理基于这样一个事实:两个整数 \(a\) \(b\) 的最大公约数等于较小的那个数与两者相除后的余数之间的最大公约数。当其中一个数变为零时,另一个即为所最大公约数[^1]。 ```c++ // 定义gcd函数用于返回两个整数的最大公约数 int gcd(int a, int b){ return b == 0 ? a : gcd(b, a % b); } ``` #### 计算最小公倍数的方法 一旦获得了给定整数对的最大公约数之后,就可以很容易地通过下面的关系式得到它们之间最小公倍数: \[ \text{LCM}(a,b)=\frac{|ab|}{\text{GCD}(a,b)} \] 这里需要注意的是,在实际编码过程中应当先做乘法再取绝对值最后才执行除法操作以防止溢出问题的发生[^4]。 ```c++ // 基于已知的gcd函数定义lcm函数用于返回两个整数的最小公倍数 long long lcm(long long a,long long b){ return abs((a*b)/gcd(a,b)); } ``` 为了提高程序健壮性效率,建议在调用上述`lcm()`之前确保传入参数均为正值;另外考虑到可能存在的数据范围过大情况,推荐使用更大容量的数据类型如 `long long` 来存储中间结果以及最终输出的结果。 针对多于两个以上数字的情形,则可以通过循环依次应用这两个基本运算来进行累加式的处理直到遍历完所有待处理项为止[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值