求解最大公约数和最小公倍数

简介: 求解最大公约数和最小公倍数

求最大公约数


最大公约数的定义:如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。例: 在2、4、6中,2就是2,4,6的最大公约数。


 知道了最大公约数的定义后,我们来学习一下最大公约数的求解方法。


1.暴力求解法


 思路:假设有两个数m和n,先求出两个数中的较小值min,然后利用while循环找出m和n的最大公约数。while循环的循环体是如果m和n整除min同时为零,那么此时的min就是m和n的最大公约数;不符合该条件的话min自减一。


代码实现:


#include <stdio.h>
int main()
{
  int m, n;
  printf("请输入两个整数:>");
  scanf("%d %d", &m, &n);
  int min = (m < n ? m : n);
  while (1)
  {
    if ((m % min == 0) && (n % min == 0))
    {
      break;
    }
    min--;
  }
  printf("%d和%d的最大公约数是%d\n", m, n, min);
  return 0;
}


输出结果:

463a27e9676b4a11b71674ef3b4bd509.png


2. 辗转相除法


辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求两个正整数之最大公约数的算法。它是已知最古老的算法, 其可追溯至公元前300年前。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。


代码实现:


#include <stdio.h>
int main()
{
  int m, n;
  printf("请输入两个整数:>");
  scanf("%d %d", &m, &n);
  int m1 = m;
  int n1 = n;//保存m和n的数据
  int r = 0;
  while (r = m % n)
  {
    m = n;
    n = r;
  }
  printf("%d和%d的最大公约数是%d\n", m1, n1, n);
  return 0;
}

d05003b32932475b81a04751a064dde8.png


输出结果:

6e789ebe18584b73bfd699d91871b016.png


求最小公倍数


  最小公倍数的定义:如果一个数既是a又是b的倍数,那么我们就把这个数叫着a和b的公倍数,如果这个数在a b的所有公倍数里为最小,那这个数就是最小公倍数。例如,10和20的最小公倍数是20。


1.暴力求解法


 假设有两个数m和n,先求出两个数中的最大值max,然后利用while循环找出m和n的最小公倍数。while循环的循环体是如果max整除m和n同时为零,那么此时的max就是m和n的最小公倍数;不符合该条件的话max自加一。


代码实现:


#include <stdio.h>
int main()
{
  int m, n;
  printf("请输入两个数:>");
  scanf("%d %d", &m, &n);
  int max = (m > n ? m : n);
  while (1)
  {
    if ((max % m == 0) && (max % n == 0))
    {
      break;
    }
        max++;
  }
  printf("%d和%d的最小公倍数是%d\n", m, n, max);
  return 0;
}


输出结果:

88b8b6514bb64ffdbafd2c1f99d66a93.png


2.最大公约数法


 假设有两个数m和n,且m和n的最大公约数为x、最小公倍数y,那么最小公倍数和最大公约数存在一个关系式:m * n = x * y。例如这个关系式,我们就可以实现我们的代码了。


代码实现:


#include <stdio.h>
int main()
{
  int m, n;
  printf("请输入两个数:>");
  scanf("%d %d", &m, &n);
  int m1 = m;
  int n1 = n;
  int r = 0;
  while (r = m % n)
  {
    m = n;
    n = r;
  }
  printf("%d和%d的最小公倍数是%d\n", m1, n1, m1 * n1 / n);
}


输出结果:


51cf46b7eb564273bc0aeb31d503406c.png


3.奇技淫巧


 因为最大公倍数肯定是其因素的整数倍,那么假设两个数为m和n,i等于1,其最小公倍数为k。如果m成i模除n为0,那么m*i就等于k,否则i++。


代码实现:


#include <stdio.h>
int main()
{
  int m, n;
  printf("请输入两个数:>");
  scanf("%d %d", &m, &n);
  int i = 1;
  while (m*i%n!=0)
  {
    i++;
  }
  printf("%d和%d的最小公倍数是%d\n", m, n, m*i);
  return 0;
}


输出结果:

003e3053e6c04fb9ad5ce03a6c81bed2.png


 本篇博客主要介绍了最大公约数和最小公倍数的几种常见方法。如果大家对其它的方法还感兴趣的话,可以自行查找,在这里就不在赘述了。最后,如果大家觉得有收获的话,大家可以点个赞支持一下!


结语


每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根。




相关文章
|
NoSQL 关系型数据库 MySQL
Redis之秒杀系统
秒杀是一种高并发场景,通常指的是在短时间内(秒级别)有大量用户同时访问某个商品或服务,争相抢购的情景。在这种情况下,系统需要处理大量并发请求,确保公平性、一致性,并防止因并发而导致的问题,例如超卖、恶意请求等。以下是在高并发秒杀场景下需要考虑的一些关键问题和解决方案:
275 0
|
NoSQL Redis 数据库
Redis原子操作和分布式锁setnx
Redis原子操作和分布式锁setnx
|
8月前
|
人工智能 安全 Dubbo
Spring AI 智能体通过 MCP 集成本地文件数据
MCP 作为一款开放协议,直接规范了应用程序如何向 LLM 提供上下文。MCP 就像是面向 AI 应用程序的 USB-C 端口,正如 USB-C 提供了一种将设备连接到各种外围设备和配件的标准化方式一样,MCP 提供了一个将 AI 模型连接到不同数据源和工具的标准化方法。
3743 107
|
5月前
|
算法 Go
【LeetCode 热题100】73:矩阵置零(详细解析)(Go语言版)
这篇文章详细解析了力扣热题 73——矩阵置零问题,提供两种解法:一是使用额外标记数组,时间复杂度为 O(m * n),空间复杂度为 O(m + n);二是优化后的原地标记方法,利用矩阵的第一行和第一列记录需要置零的信息,将空间复杂度降低到 O(1)。文章通过清晰的代码示例与复杂度分析,帮助理解“原地操作”及空间优化技巧,并推荐相关练习题以巩固矩阵操作能力。适合刷题提升算法思维!
143 9
|
JavaScript 前端开发 API
Py之dominate:python的dominate库的简介、安装、使用方法之详细攻略
Py之dominate:python的dominate库的简介、安装、使用方法之详细攻略
Py之dominate:python的dominate库的简介、安装、使用方法之详细攻略
(第21列)C语言典型题:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
(第21列)C语言典型题:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
(第21列)C语言典型题:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
|
测试技术 Shell API
Python+Appium自动化测试(7)-截图方法
selenium模块的两种截图方法
Python+Appium自动化测试(7)-截图方法
DHL
|
存储 算法 安全
90%的人都不懂的泛型,泛型的缺陷和应用场景
Kotlin 和 Java 的协变和逆变的区别和应用场景,数组协变的缺陷,Kotlin 和 Java 数组协变的不同之处
DHL
553 0
90%的人都不懂的泛型,泛型的缺陷和应用场景
|
10天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1210 5

热门文章

最新文章