【十分钟学会一个算法】辗转相除法

news/2024/11/29 6:40:20/

文章目录

  • 题目
  • 解析
    • 辗转相除法
      • 图示
  • 代码
  • 总结

题目

给你两个正整数 a 和 b ,返回 a 和 b 的 公因子的数目。
如果 x 可以同时整除 a 和 b ,则认为 x 是 a 和 b 的一个公因子

解析

这题本身显然是很简单的,只不过这里面有一个很古老的知识点,正好一起回忆一下,这就是辗转相除法

辗转相除法

辗转相除法用于求两个数的最大公因子。形式化讲,辗转相除法的运行过程如下:

  1. 确定两个正整数 a 和 b,其中 a 是大于 b 的。
  2. 计算 a 除以 b 的余数 r。
  3. 如果 r=0,则 b 就是 a 和 b 的最大公约数,算法结束。
  4. 否则,将 b 赋值给 a,将 r 赋值给 b,并回到第二步。

这一套看完,用肯定是会用了,毕竟一步一步来就可以了,代码也很好写。但为啥这样就能求出最大公约数呢?我们用图来解释一下。

图示

  1. 我们设要求的两个数分别为15和25请添加图片描述

  2. 用25除以15,余下10,我们可以看做就好像从25的方块中挖出一个10来在这里插入图片描述

  3. 用15除以10,余下5,就好像15中挖出5(这里开始我们不用数字来表示方块,简略的表示他们的大小关系)在这里插入图片描述

  4. 10除以5,我们发现余数为0,则25和5的最大公约数就是5
    在这里插入图片描述

在这个过程中,我们实际上挖掉的是余数,而余数/余数=1,然后我们再用剩下的那一块/余数,相当于每次试图从被除数中挖出尽量多个余数。当余数为0时,我们认定上一轮的余数5可以将当前还没被挖的那一部分挖尽,所以被除数和除数都能整除这个余数,所以辗转相除法成立。

这道题中涉及到的比较重要的知识点大概就这一个,搞明白这一点,这道题也就没什么难的了。
最后,浅浅贴一下官方的代码:

代码

class Solution {
public:int commonFactors(int a, int b) {int c = gcd(a, b), ans = 0;//辗转相除法的函数gcdfor (int x = 1; x * x <= c; ++x) {if (c % x == 0) {++ans;if (x * x != c) {++ans;}}}return ans;}
};

总结

一道水题,可能是官方在清明节网开一面,想让大家休息休息吧。但辗转相除法还是比较重要的,有的时候可以有效优化时间复杂度。

我是霜_哀,在算法之路上努力前行的一位萌新,感谢你的阅读!如果觉得好的话,可以关注一下,我会在将来带来更多更全面的算法讲解!


http://www.ppmy.cn/news/39693.html

相关文章

作为一个项目经理,这七个项目管理经验你掌握了吗?

作为一名项目经理&#xff0c;我在多年的管理经验中积累了不少经验&#xff0c;今天就来分享一下&#xff1a; 参考模板&#xff1a;http://s.fanruan.com/irhj8​​​​​​​ 1.明确项目目标和范围 在项目开始之前&#xff0c;首先要明确项目的目标和范围。 项目目标是指项…

如何搭建chatGPT4.0模型-国内如何用chatGPT4.0

国内如何用chatGPT4.0 在国内&#xff0c;目前可以通过以下途径使用 OpenAI 的 ChatGPT 4.0&#xff1a; 自己搭建模型&#xff1a;如果您具备一定的技术能力&#xff0c;可以通过下载预训练模型和相关的开发工具包&#xff0c;自行搭建 ChatGPT 4.0 模型。OpenAI提供了相关的…

聊一聊Java中的悲观锁和乐观锁

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 文章目录悲观锁&#xff08;Pessimistic Locking&#xff09;悲观锁存的问题&#xff1a;乐观锁乐观锁存在的问题悲观锁和乐观锁的对比总…

【Mybatis】3—Mybatis映射关联关系

⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 如果文章对你有所帮助&#xff0c;可以点赞&#x1f44d;…

python的collections模块详解

目录 1.namedtuple(‘name’, [list]) 2.Counter() 3.deque() 4.OrderedDict() 前言&#xff1a; python中内置容器包括list、dict、set、tuple&#xff0c;而python中的collections模块则另引入了五种数据结构&#xff0c;更好地满足编码需求。 collections 是python内…

Anaconda详细安装使用

如果想在conda里面删除某个环境&#xff0c;可以使用 conda remove -n name --all 来删除。 其中 conda info --envs 是查看环境&#xff0c;切换环境 activate base 。 Anaconda Anaconda | The Worlds Most Popular Data Science PlatformAnaconda is the birthplace of Pyt…

《Web应用开发》头歌

目录 一、实验一HTML基础 HTML——表单类的标签 第1关&#xff1a;表单元素——文本框 第2关&#xff1a;表单元素——密码框 第3关&#xff1a;表单元素——单选框 第4关&#xff1a;表单元素——多选框 第5关&#xff1a;表单元素——checked属性 第6关&#xff1a;表…

自然语言处理实战项目2-文本关键词抽取和关键词分值评估

大家好&#xff0c;我是微学AI&#xff0c;今天给大家带来自然语言处理实战项目2-文本关键词抽取和关键词分值评估。关键词抽取是自然语言处理中的重要任务&#xff0c;也是基础任务。 一、关键词抽取传统方法 1.基于统计的方法&#xff1a; 基于统计的方法是通过对一组文本…