GCD和LCM

  GCD _ LCM 是给你两个数A B 的最大公约数, 以及最小公倍数

  the greatest common divisor and the least common multiply ! 

 

  最大公约数最简单、最常见的算法,就是辗转相除法   : 

      假设 GCD(A , B) ; A / B = P ;  A % B = Q;  那么 A =  B P + Q;

  GCD(B, Q);

  GCD (A , B)  % GCD (B , Q) = 0     :  因为 A  的表达式当中包括了 B 、 Q;

  同理,我们可以由 : Q = A - BP;

  GCD (B , Q)  % GCD (A , B) = 0;

   所以说两者相等, 得到了辗转相除法求得GCD 的方法, 那么 LCM 如何求得呢??

  通过A B 的乘法因子来看: GCD 是相同的因子, LCM 是相同的因子只是取一个,

两个想乘,刚刚好可以互补, 即 GCD * LCM = A*B;

  所以说最大公约数可以通过最小公倍数来求得!

 

 

  那么代码 !!::: 

  

复制代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#include <vector>
#include <queue>
#include <list>
#include <map>
#include <stack>
#include <set>
using namespace std;

int GCD(int a, int b){
    if(b == 0)  return a;
    else return GCD(b, a % b);
}


int main()
{
    cout << "Hello world!" << endl;
    printf("GCD :  %d , LCM : %d \n", GCD(10, 5), 5 * 10 / GCD(10, 5));
    printf("GCD :  %d , LCM : %d \n", GCD(10, 20), 20 * 10 / GCD(10, 20));
    printf("GCD :  %d , LCM : %d \n", GCD(10, 2), 2 * 10 / GCD(10, 2));

    return 0;
}
复制代码

 

 

  但是有些时候, 我们需要注意, 使用 long long int ,   防止部分题目进行卡数据, 注意题目中的数据范围

posted @   lucky_light  阅读(359)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示