你是真的“C”——求两个正数最小公倍数的3种境界~

简介: 必备小知识~😘什么是最小公倍数和最大公约数(最大公因数)?

微信图片_20230427171714.gif

博客昵称:博客小梦😊

最喜欢的座右铭:全神贯注的上吧!!!

作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!

博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘微信图片_20230427160707.gif

前言🙌


   哈喽各位友友们😊,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!😘我仅已此文,手把手用C语言讲解求两个正数最小公倍数的3种境界!都是精华内容,可不要错过哟!!!😍😍😍


必备小知识~😘


什么是最小公倍数和最大公约数(最大公因数)?


最小公倍数就是可以整除这两个数的最小的数,例如:6和9的最小公倍数就是18,3和5的最小公倍数是15。==也可以说是两个数相乘除以他们的最大公约数==。

最大公约数的概念和最小公倍数正好相反,就是两个数都可以整除的最大的数,如3和5的最大公约数就是1,而6和9的最大公约数就是3。


求最小公倍数境界1~ 😊


境界1的算法求解过程分析:


这里的变量count 主要是求其循环比较的次数,通过这个可以比较看出三种境界算法的优劣性。

先定义一个count变量存储这两个数的最大值。

如果满足 max % a != 0 || max % b != 0,就让最大值加1,直到有一个能够被a和b同时整除的数就退出循环,这个数就是a和b的最小公倍数。


境界1源码: 😍


#include <stdio.h>
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  int count = 0;
  int max = a > b ? a : b;//先找到最大值
  while (max % a !=  0 || max % b != 0)
  {
    max++;
    count++;
  }
  printf("最小公倍数 = %d,比较运行的次数 = %d ", max,count);
  return 0;
}


代码结果运行图: 😍


微信图片_20230427172035.png


可见count = 39204 ,这个循环比较次数为39204,可见其算法效率非常低效。有没有更好的算法呢?请耐心看下文分析~


求最小公倍数境界2~ 😊


境界2的算法求解过程分析:


这里的变量count 主要是求其循环比较的次数,通过这个可以比较看出三种境界算法的优劣性。

定义一个变量i,让它从1开始,符合条件就自增。一个数的i倍,即乘以i其表达式结果就是这个数倍数,如果可以被另一个数整除,说明这个倍数就是这两个数的公倍数。因为i是从1开始自增的,所以第一个满足这个条件的一定是这两个数的最小公倍数啦。


境界2源码: 😍


#include <stdio.h>
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  int i = 1;
  int count = 0;
  while (i*a % b != 0)
  {
    i++;
    count++;
  }
  printf("最小公倍数 = %d,比较运行的次数 = %d ",i*a,count);
  return 0;
}


代码结果运行图: 😍


微信图片_20230427172239.png


可见count = 1781 ,这个循环比较次数为1781,可见其算法效率比境界一有了明显的改善!那还有没有比这个更好的算法呢?请耐心看下文分析~


求最小公倍数境界3~ 😊


辗转相除法流程图解:


微信图片_20230427172322.png


境界3源码: 😍


#include <stdio.h>
int main()
{
  int m = 0;
  int n = 0;
  scanf("%d %d", &m, &n);
  int a = m * n;
  int r = 0;
  int count = 0;
  while (r = m % n)
  {
    m = n;
    n = r;
    count++;
  }
  printf("最小公倍数 = %d,比较运行的次数 = %d ", a / n, count);
  return 0;
}


代码结果运行图: 😍


微信图片_20230427172434.png


可见count = 3 ,这个循环比较次数为3,可见其算法效率真的是太惊人了!,但是这个算法还是有一个缺点,就是变量 a = m * n。如果这两个数很大,可能它们相乘的结果太大超出类型的最大数值。


总结撒花💞


本篇文章旨在带领大家利用C语言详解 - 求两个正数最小公倍数的3种境界。希望大家通过阅读此文有所收获!😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘


相关文章
|
XML Java 关系型数据库
Maven实战从入门到精通(全)
目录前言1. 安装及配置2. 核心概念 前言 了解Maven的具体概念、功能、具体执行步骤以及如何搭建等 Maven 具体功能: maven 是自动化构建工具,可以部署项目;管理jar文件,自动下载jar、文档和源代码;管理jar直接的依赖以及版本;编译程序,把java编译为class;测试代码是否正确;打包文件,形成jar文件或者war文件 具体构建步骤: 构建是面向过程,主要步骤是 清理:把之前项目编译的东西删除掉,为新的编译代码做准备。 编译: 把程序源代码编译为执行代码, 把java编译成clas
861 0
Maven实战从入门到精通(全)
|
JavaScript IDE Java
一文搞定Maven
本文讲解Maven的入门讲解
1155 0
一文搞定Maven
|
机器学习/深度学习 数据采集 人工智能
虚拟偶像诞生记 - 数字人行业和技术探究
为你讲述当前业界的现状,包括不同行业中的showcase和优秀的技术/创作平台,引出近几年比较火热的元宇宙概念,包含多个核心技术点,同时畅想数字人在未来的技术增长和业务价值,以及当下我们该如何布局。
13254 5
虚拟偶像诞生记 - 数字人行业和技术探究
AD2428W手册解读之系统调试 中
AD2428W手册解读之系统调试 中
AD2428W手册解读之系统调试 中
|
小程序 JavaScript 计算机视觉
无需交 300 元认证费,快速创建已认证的小程序
快速创建小程序接口优化了小程序注册认证的流程,能帮助第三方平台迅速拓展线下商户,拓展商户的服务范围,占领小程序线下商业先机。采用法人人脸识别方式替代小额打款等认证流程,极大的减轻了小程序主体、类目资质信息收集的人力成本。通过该接口创建小程序默认为“已认证”。为降低接入小程序的成本门槛,通过该接口创建的小程序无需交 300 元认证费。
385 0
无需交 300 元认证费,快速创建已认证的小程序
|
编解码 监控 安全
【新功能】安卓手机设置“自动”初始化
【新功能】安卓手机设置“自动”初始化
1892 0
一篇文章帮助你理解跑马灯的滚动原理
一篇文章帮助你理解跑马灯的滚动原理
299 0
一篇文章帮助你理解跑马灯的滚动原理
|
SQL 运维 负载均衡
OceanBase 数据库认证专员 OBCA 上线啦!报名认证考试限时免费
OceanBase 数据库认证专员 OBCA 认证现已正式上线 OceanBase 官网(www.oceanbase.com/training),快来学习 OBCA 课程,迈出成为 OceanBase 数据库大师的第一步!
OceanBase 数据库认证专员 OBCA 上线啦!报名认证考试限时免费
|
机器学习/深度学习 存储 数据库
Word报告自动生成(例如 导出数据库结构)(上)
将很早之前写的一个小组件重新整理优化一下,做成一个通用的功能。适用于导出数据库的结构(表、字段等)到Word或将体检数据自动生成Word版的体检报告等。
623 0
Word报告自动生成(例如 导出数据库结构)(上)
|
NoSQL 数据管理 数据库
GDB索引:更快的速度探索互联数据的奥秘
阿里云图数据库GDB对于用户点边的每一个属性都会自动创建索引信息,减少用户额外的索引操作。同时,用户也可以根据访问场景通过GDB支持的标准图查询语言Gremlin动态地创建复合索引、唯一索引和点中心索引等其它类型的索引来加速特定的查询。
1892 0
GDB索引:更快的速度探索互联数据的奥秘