首页 > 编程语言 >最大公约数(gcd())和最小公倍数(lcm())的c语言和c++详细解法

最大公约数(gcd())和最小公倍数(lcm())的c语言和c++详细解法

时间:2024-06-07 22:30:50浏览次数:18  
标签:code gcd 公倍数 c++ int 最大公约数 include

最大公约数(gcd())和最小公倍数(lcm())

最大公约数:

定义:

两个或多个整数共有的约数中最大的一个。
例如:整数12和18,他们的公约数有1、2、3、6,其中最大的公约数是6。

c语言解法:辗转相除法和更相减损法

1、辗转相除法:
思路:先求解较大的数除以较小的数的余数,再用较小的数除以前面求的余数,若求解下来的结果是0,则余数是最大公约数。
code:

#include <iostream>
using namespace std;
int a,b;
int c;
int r;
int main(){
    cin>>a>>b;
    if(a<b){
        c=a;
        a=b;
        b=c;
    }
    while(a>0){
        r=a%b;
        b=b/a;
        if(b==0){
            cout<<r<<endl;
            break;
        }
    }
}

2、更相减损法
思路:给定两个正整数,用较大的数减去较小的数,然后继续这个过程,直到得到两个相等的数,这个数就是这两个数的最大公约数。
code:

#include <iostream>
using namespace std;
int a,b;
int main(){
    cin>>a>>b;
    while(b!=0){
        if(a>b) a=a-b;
        else b=b-a;
    }
    cout<<a<<endl;
}

c++解法:gcd()函数

code:

#include <iostream>
#include <numeric>
using namespace std;
int main(){
    int b=12;
    int c=18;
    int a=gcd(b,c);
    cout<<a<<endl;
}

最小公倍数:

定义:

两个或多个整数的公倍数中最小的一个。
例如:整数12和18,他们的公倍数有36、72、108,其中最小公倍数是36。

c语言解法:使用最大公约数和直接求最小公倍数

1、使用最大公约数
思路:最小公倍数和最大公约数之间存在关系:两个数的乘积等于它们的最大公约数和最小公倍数的乘积。
code:

#include <iostream>
using namespace std;
int a,b;
int c;
int d;
int gcd(int x,int y){
    while(y!=0){
        if(x>y) x=x-y;
        else y=y-x;
    }
    return x;
}
int main(){
    cin>>a>>b;
    c=gcd(a,b);
    d=(a*b)/c;
    cout<<d<<endl;
}

2、直接求最小公倍数
思路:从两个数中较大的数开始,逐渐增加,直到找到一个数,它同时能被两个数整除。(效率低,不推荐使用)
code:

#include <iostream>
using namespace std;
int b,c;
int a(int x,int y){
    int max=(x>y) ? x : y;
    while(1){
        if(max%x==0&&max%y==0){
            return max;
        }
        max++;
    }
}
int main(){
    cin>>b>>c;
    int d=a(b,c);
    cout<<d<<endl;
}

c++解法:lcm()函数

code:

#include <iostream>
#include <numeric>
using namespace std;
int main(){
    int b=12;
    int c=18;
    int a=lcm(b,c);
    cout<<a<<endl;
}

标签:code,gcd,公倍数,c++,int,最大公约数,include
From: https://blog.csdn.net/2301_80662593/article/details/139452416

相关文章

  • C++STL---list模拟实现
    本文我们模拟实现STL中的list,为了模拟实现list,实际上我们需要实现三个类,分别为:_list_node,_list_iterator,list。我们先看一下这三个类的基本组成,主要是看看每个类中包含的变量有什么:namespaceCYF{ //模拟实现list当中的结点类 template<classT> struct_list_node......
  • Mat的lambda方式像素高效遍历(C++11)
    Mat的lambda方式像素高效遍历(C++11)文章目录Mat的lambda方式像素高效遍历(C++11)前言一、Mat的lambda方式像素高效遍历二、代码实现总结前言图像遍历是图像处理中的经典操作,快速高效的进行像素遍历对性能的提升至关重要。一、Mat的lambda方式像素高效遍历OpenCV4......
  • 【c++基础】八数码难题
    说明在 3×3 的棋盘上,摆有八个棋子,每个棋子上标有 1 至 8 的某一数字。棋盘中留有一个空格,空格用 0 来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现......
  • c++入门笔记——头文件
    【头文件】c++中,一个程序开头必有头文件。头文件有许多个,它们的关系是并列的。<algorithm>:包含STL通用算法。<bitset>:包含bitset类模板。<cassert>:包含断言宏,如assert。<cctype>:包含字符处理函数。<cerrno>:定义错误码变量errno。<cfenv>:提供有关浮点环境的操作。......
  • [C++] 小游戏 能量1.0.2版本 zty出品
    大家好,欢迎来到今天的代码。我很荣幸能够在这里与大家见面。今天我想向大家介绍的是能量1.0.2版本。本次主要更新了人工智障的智商,没有以前那么笨了。先赞后看养成习惯CODE#include<bits/stdc++.h>#include<windows.h>usingnamespacestd;intrgzz(intlun,intdineng,......
  • c++ 静态成员的初始化 友元模板
     来自:https://www.cnblogs.com/fre2technic/archive/2011/03/25/1995044.html 我们定义如下类://A.hclass A{private:    static const int m = 5;    static int n;    static vector<int> buf;};其中包含三个私有的静态类成员,C++规定const静态......
  • C++数据结构之:哈希表Hash
    摘要:  it人员无论是使用哪种高级语言开发东东,想要更高效有层次的开发程序的话都躲不开三件套:数据结构,算法和设计模式。数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储......
  • C++数据结构之:图Graph
    摘要:  it人员无论是使用哪种高级语言开发东东,想要更高效有层次的开发程序的话都躲不开三件套:数据结构,算法和设计模式。数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储结......
  • C/C++ 联合体的注意事项
    联合体(Union)在C/C++中是一个特殊的数据类型,它允许在相同的内存位置存储不同的数据类型。联合体的主要特点是,其所有的成员共享同一块内存区域,也就是说,联合体中的各个成员首地址都是相同的。这使得联合体在节省内存、进行数据类型转换等方面非常有用。然而,使用联合体时也需要注意......
  • C++ 模板
    一.非类型模板参数模板参数分为类型形参与非类型形参。类型形参:类作为模板参数,typename/classT(T就是类型形参)非类型形参:内置类型作为模板参数,intdoublechar...(在C++20前只有int可以传)这样我们就可以随便定义栈的大小。注:因为n是常量所以是不能修改的。......