当前位置: 首页 > news >正文

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

C语言详解求两个正数最小公倍数的3种境界~😎

  • 前言🙌
  • 必备小知识~😘
  • 求最小公倍数境界1~ 😊
  • 求最小公倍数境界2~ 😊
  • 求最小公倍数境界3~ 😊
  • 总结撒花💞

   
博客昵称:博客小梦😊
最喜欢的座右铭:全神贯注的上吧!!!
作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!

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

前言🙌

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

必备小知识~😘

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

  • 最小公倍数就是可以整除这两个数的最小的数,例如: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;
}

代码结果运行图: 😍

在这里插入图片描述可见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;
}

代码结果运行图: 😍
在这里插入图片描述
可见count = 1781 ,这个循环比较次数为1781,可见其算法效率比境界一有了明显的改善!那还有没有比这个更好的算法呢?请耐心看下文分析~

求最小公倍数境界3~ 😊

辗转相除法流程图解

在这里插入图片描述

境界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;
}

代码结果运行图: 😍

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

总结撒花💞

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

http://www.lryc.cn/news/13632.html

相关文章:

  • 【java】Spring Cloud --Feign Client超时时间配置以及单独给某接口设置超时时间方法
  • spark代码
  • 利用OpenCV的函数equalizeHist()对图像作直方图均衡化处理
  • 星河智联Android开发
  • 【C++】关联式容器——map和set的使用
  • Promise的实现原理
  • 【MFC】数据库操作——ODBC(20)
  • 旺店通与金蝶云星空对接集成采购入库单接口
  • Linux基础-学会使用命令帮助
  • MyBatis 之四(动态SQL之 if、trim、where、set、foreach 标签)
  • PAT (Advanced Level) Practice 1006 Sign In and Sign Out
  • Android入门第64天-MVVM下瀑布流界面的完美实现-使用RecyclerView
  • Windows PowerShell中成功进入conda虚拟环境
  • 【C++】类与对象理解和学习(中)
  • 每日英语学习(11)大英复习单词和翻译
  • x79主板M.2无法识别固态硬盘
  • 配置Tomcat性能优化
  • Hive3 安装方式详解,datagrid自定义驱动连接hive
  • 约束优化:约束优化的三种序列无约束优化方法(罚函数法)
  • 你真的会做APP UI自动化测试吗?我敢打赌百分之九十的人都不知道这个思路
  • GIT:【基础三】Git工作核心原理
  • 【1.12 golang中的指针】
  • 十五.程序环境和预处理
  • 高并发系统设计之负载均衡
  • 嵌入式Linux从入门到精通之第十四节:Linux IO控制技术
  • /etc/fstab文件
  • 深度学习神经网络基础知识(一) 模型选择、欠拟合和过拟合
  • 同样做软件测试,为什么有人月入3k-5k,有人能拿到17-20k?
  • 如何运行YOLOv5的代码,实现目标识别
  • 【正点原子FPGA连载】第十四章SD卡读写TXT文本实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南