最大公约数和最小公倍数

本题目要求读入2个正整数A和B,然后输出它们的最大公约数和最小公倍数。

输入格式:

输入在一行中给出2个不超过10000的正整数A和B。

输出格式:

对每一组输入,在一行中输出最大公约数和最小公倍数,用逗号分隔。

输入样例:

2 3

输出样例:

1,6

 分析:

最大公约数和最小公倍数是数论中两个重要的概念。它们可以用来解决许多实际问题,也是编程中常见的算法题目。

最大公约数(Greatest Common Divisor,GCD)是指两个正整数中能同时整除它们的最大正整数。我们可以使用递归方式来计算:如果第二个数为0,则最大公约数是第一个数;否则递归调用函数求余数和第二个数的最大公约数。

最小公倍数(Least Common Multiple,LCM)是指能被两个正整数同时整除的最小正整数。由于最大公约数与最小公倍数之间存在乘法关系:两个数的最大公约数乘以最小公倍数等于两个数本身的乘积。所以我们可以直接利用最大公约数结果计算最小公倍数。

它们之间具有如下关系:

d(a,b) × l(a,b) = a × b

计算最大公约数和最小公倍数的一般算法如下:

C++

// 最大公约数
int gcd(int a, int b) {
  return b == 0 ? a : gcd(b, a%b);
}

// 最小公倍数 
int lcm(int a, int b) {
  return a * b / gcd(a, b);
}

通过递归的方式来计算两个数的最大公约数。最小公倍数则利用最大公约数和其定义关系来进行计算。

这两个概念在数论和程序设计中广泛应用。比如求分数简化、时间表规划等都可以利用它们来解决问题。

总代码如下:#include<stdio.h>
int main(){
    int a,b,m,n,x;
    scanf("%d %d",&a,&b);
    if (a<b){
        x=a;
        a=b;
        b=x;
    }
    m=a;
    n=b;
    while(n!=0&&m%n!=0){
        x=m;
m=n;
n=x%n;
}
m=a*b/n;
printf("%d,%d",n,m); 
return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值