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

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

求最大公约数


最大公约数的定义:如果有一个自然数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 Redis 数据库
Redis原子操作和分布式锁setnx
Redis原子操作和分布式锁setnx
|
9月前
|
算法 Go
【LeetCode 热题100】73:矩阵置零(详细解析)(Go语言版)
这篇文章详细解析了力扣热题 73——矩阵置零问题,提供两种解法:一是使用额外标记数组,时间复杂度为 O(m * n),空间复杂度为 O(m + n);二是优化后的原地标记方法,利用矩阵的第一行和第一列记录需要置零的信息,将空间复杂度降低到 O(1)。文章通过清晰的代码示例与复杂度分析,帮助理解“原地操作”及空间优化技巧,并推荐相关练习题以巩固矩阵操作能力。适合刷题提升算法思维!
287 9
|
6月前
|
SQL 搜索推荐 数据挖掘
数据分析怎么想、怎么用?一文讲透常见思维框架!
在数据分析中,很多人面对数据感到迷茫,主要问题在于缺乏清晰的思维框架。本文介绍了五种常用的数据分析思维框架,如拆解法、对比分析法、5W1H问题导向法等,帮助你在业务场景中理清思路、快速定位问题核心。通过实际案例讲解如何在不同情境下灵活运用这些框架,提升分析效率与逻辑表达能力,真正做到用数据驱动决策。
|
12月前
|
人工智能 安全 Dubbo
Spring AI 智能体通过 MCP 集成本地文件数据
MCP 作为一款开放协议,直接规范了应用程序如何向 LLM 提供上下文。MCP 就像是面向 AI 应用程序的 USB-C 端口,正如 USB-C 提供了一种将设备连接到各种外围设备和配件的标准化方式一样,MCP 提供了一个将 AI 模型连接到不同数据源和工具的标准化方法。
5120 100
|
7月前
|
人工智能 API 开发者
智能体(AI Agent)开发实战之【LangChain】(一)接入大模型输出结果
LangChain 是一个开源框架,专为构建与大语言模型(LLMs)相关的应用设计。通过集成多个 API、数据源和工具,助力开发者高效构建智能应用。本文介绍了 LangChain 的环境准备(如安装 LangChain、OpenAI 及国内 DeepSeek 等库)、代码实现(以国内开源大模型 Qwen 为例,展示接入及输出结果的全流程),以及核心参数配置说明。LangChain 的灵活性和强大功能使其成为开发对话式智能应用的理想选择。
|
存储 关系型数据库 MySQL
MySQL主键谁与争锋:MySQL为何钟爱自增主键ID+UUID?
本文深入探讨了在MySQL中使用自增类型主键的优势与局限性。自增主键通过保证数据的有序性和减少索引维护成本,提升了查询和插入性能,简化了数据库管理和维护,并提高了数据一致性。然而,在某些业务场景下,如跨表唯一性需求或分布式系统中,自增主键可能无法满足要求,且存在主键值易预测的安全风险。因此,选择主键类型时需综合考虑业务需求和应用场景。
441 2
|
JavaScript 前端开发 API
Py之dominate:python的dominate库的简介、安装、使用方法之详细攻略
Py之dominate:python的dominate库的简介、安装、使用方法之详细攻略
Py之dominate:python的dominate库的简介、安装、使用方法之详细攻略
|
网络安全 数据安全/隐私保护 Windows
freeSSHd工具安装使用
【5月更文挑战第21天】freeSSHd工具安装使用
3074 2
Intellij IDEA运行报Command line is too long的解决办法
Intellij IDEA运行报Command line is too long的解决办法
1961 1
|
网络协议
EVPN小实验:集中式EVPN网关配置(下)
EVPN小实验:集中式EVPN网关配置
EVPN小实验:集中式EVPN网关配置(下)

热门文章

最新文章