洛谷 B3634:最大公约数和最小公倍数 ← 更相减损法

【题目来源】
https://www.luogu.com.cn/problem/B3634

【题目描述】
给定两个正整数 a,b,求他们的最大公约数(gcd)和最小公倍数(lcm)。这两个整数 a,b 均在 int 范围内。

【输入格式】
两个整数 a 和 b,用空格分隔。

【输出格式】
两个整数表示答案,用空格隔开。

【输入样例】
6 15

【输出样例】
3 30

【数据范围】
整数 a,b 均在 int 范围内。

【算法分析】
● 因为 a/gcd(a,b)*b 有可能爆 int,所以需强制转换为 long long 型。
● 更相减损法,是一种求两个正整数最大公约数的算法,它出自中国古代数学著作《九章算术》。更相减损法的基本原理是通过反复用较大的数减去较小的数,直到两数相等为止,此时的数即为两数的最大公约数。更相减损法原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。

【算法代码】

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

typedef long long LL;

int gcd(int a,int b) {
    if(a==b) return a;
    else if(a>b) return gcd(a-b,b);
    else return gcd(a,b-a);
}

int main() {
    int a,b;
    cin>>a>>b;
    cout<<gcd(a,b)<<" "<<(LL)a/gcd(a,b)*b;

    return 0;
}

/*
in:6 15
out:3 30
*/

【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/161171641
https://www.luogu.com.cn/problem/solution/B3634
https://blog.csdn.net/hnjzsyjyj/article/details/145671149

相关推荐
汉克老师17 天前
GESP2025年6月认证C++五级( 第一部分选择题(1-8))
c++·链表·线性筛·最大公约数·gesp5级·gesp五级·埃氏筛
迈巴赫车主2 个月前
求最大公约数-欧几里得算法(辗转相除法)
算法·最大公约数
_OP_CHEN5 个月前
【算法基础篇】(三十八)数论之最大公约数与最小公倍数 —— 从原理到实战
蓝桥杯·数论·最大公约数·最小公倍数·欧几里得算法·acm/icpc·秦九韶算法
hnjzsyjyj5 个月前
洛谷 B4355:[GESP202506 一级] 值日 ← 最小公倍数(三种方法)
最大公约数·最小公倍数
nju_spy6 个月前
力扣每日一题(11.10-11.29)0-1 和 k 整除系列
python·算法·leetcode·前缀和·单调栈·最大公约数·0-1背包
heeheeai8 个月前
辗转相除法(欧几里得算法)的证明
算法·最大公约数
hnjzsyjyj10 个月前
洛谷 P13014:[GESP202506 五级] 最大公因数
最大公约数
大桔骑士v1 年前
【算法学习笔记】34:扩展欧几里得算法
算法·acm·数论·最大公约数·扩展欧几里得算法
xuchaoxin13752 年前
公约数@公因数@互素@最大公约数@公约数相关性质定理@辗转相除法@欧几里得法
最大公约数