辗转相除法

其实是求a、b(a>b)最大公约数。
(leetcode 1979. 找出数组的最大公约数)
方法一:遍历,遍历的思想就是从2开始到b(或者b/2)结束,如果其中某个数都能被两者整除,那该数就是最大公约数。

nums=[a,b]
A_max = max(nums)
B_min = min(nums)
int greatestCommonDivisor = 1;
for i in range(2,b+1):if A_max%i==0 and B_min%i==0:greatestCommonDivisor = i

方法二:辗转相除法
定理:两个正整数a、b(a>b)的最大公约数就是b和a%b(a除以b的余数)的最大公约数。
边界是当余数为0时最大公约数为另一个数。

class Solution:def findGCD(self, nums: List[int]) -> int:def gcd(a,b):  #a>bif b==0:return aelse:return gcd(b, a%b)BigNum, SmallNum = max(nums), min(nums)return gcd(SmallNum, BigNum%SmallNum)

方法三:更相减损法
定理:两个正整数a、b(a>b)的最大公约数就是b和a-b的最大公约数。
边界是当差为0时最大公约数为另一个数。

class Solution:def findGCD(self, nums: List[int]) -> int:BigNum, SmallNum = max(nums), min(nums)def gcd(a,b):if a == b:return aelif a > b:return gcd(b, a-b)else:return gcd(a, b-a)return gcd(SmallNum, BigNum)

方法四:结合辗转相除法和更相减损法(主要是取模操作可以用移位替代),分情况讨论:

  • 如果a和b都是偶数,那么gcd(a,b)=2*gcd(a/2,b/2)=2*gcd(a>>1,b>>1)
  • 如果a是偶数,b是奇数,那么gcd(a,b)=gcd(a/2,b)=gcd(a>>1,b)
  • 如果a是奇数,b是偶数,那么gcd(a,b)=gcd(a,b/2)=gcd(a,b>>1)
  • 如果a和b都是奇数,那么gcd(a,b)=gcd(a,a-b),然后此时a-b一定是偶数,又可以进行移位操作。
class Solution:def findGCD(self, nums: List[int]) -> int:BigNum, SmallNum = max(nums), min(nums)def gcd(a,b):if a == b:return aelse:#与1做按位操作判断奇偶if ~a&1 and ~b&1:return 2*gcd(a>>1,b>>1)elif ~a&1 and b&1:return gcd(a>>1,b)elif a&1 and ~b&1:return gcd(a,b>>1)else:return gcd(b, a-b)return gcd(BigNum, SmallNum)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/179380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音小店怎么运营?新手应该如何做?一篇详解!

我是电商珠珠 我做抖音小店也已经快三年了,期间呢也不断在网上做分享。 有很多小伙伴问我最多的问题就是,抖音小店这么赚钱,那新手小白的话怎么做,做不起来怎么办。 我将做店总共分为了五步,懂事的小伙伴已经开始记…

【工具】Zotero|使用Zotero向Word中插入引用文献(2023年)

版本:Word 2021,Zotero 6.0.30 前言:两年前我找网上插入文献的方式,网上的博客提示让我去官网下个插件然后才能装,非常麻烦,导致我对Zotero都产生了阴影。最近误打误撞发现Zotero自带了Word插件&#xff0c…

KMP算法【数据结构】

KMP算法 KMP算法是一种改进的字符串匹配算法 Next[j] k :一个用来存放子串返回位置的数组,回溯的位置用字母k来表示。其实就是从匹配失败位置,找到他前面的字符串的最大前后相等子串长度。默认第一个k值为-1(Next[0] -1),第二个k值为0(Next[1] 0),我…

SpringBoot使用动态Banner

SpringBoot使用动态Banner Spring Boot 2.0 提供了很多新特性&#xff0c;其中就有动态 Banner。 1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://w…

一些关于开关电源经典回答

1、开关电源变压器如果用铜带取代漆包线&#xff0c;其允许通过的电流怎么算?比如说厚度为0.1mm的铜带&#xff0c;允许通过的电流怎么算? 专家&#xff1a;如果开关电源变压器用铜带取代漆包线&#xff0c;铜带(漆包线)的涡流损耗可以大大将小&#xff0c;工作频率可以相应…

【开题报告】基于SpringBoot的天文学知识交流平台的设计与实现

1.选题背景 天文学是一门古老而又充满神秘感的学科&#xff0c;吸引着众多人的关注和热爱。随着科技的发展&#xff0c;我们对宇宙的认知愈加深入&#xff0c;人们对天文学的热情也愈加高涨。然而&#xff0c;目前市场上缺乏一个专门的平台&#xff0c;供天文学爱好者交流、分…

React的父子组件互相通信

在写项目的时候遇到了父子组件互相调用对方的方法&#xff0c;然后知道用什么逻辑写&#xff0c;但是就是没写对过&#xff0c;开始用的props和ref,但是报错就去用的context,context在引用的时候还是报错&#xff0c;所以最后还是用的props和ref,下边是实现的案例。 父组件 Fat…

11 动态规划解最后一块石头的重量II

来源&#xff1a;LeetCode第1049题 难度&#xff1a;中等 描述&#xff1a;有一堆石头&#xff0c;用证书数组stones表示&#xff0c;其中stones[i]表示第i块石头的重量&#xff0c;每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将他们放在一起粉碎&#xff0c;…

【Java Spring】SpringBoot 配置文件

1、Spring Boot配置文件的作用 配置文件的基本作用&#xff1a; 数据库连接信息&#xff08;包括用户名和密码的设置&#xff09;项目的启动端口第三方系统的调用密钥等信息用于发现和定位问题的普通日志和异常日志等 2、Spring Boot配置文件的格式 Spring Boot配置文件主要…

想成为网络安全工程师该如何学习?

一、网络安全应该怎么学&#xff1f; 1.计算机基础需要过关 这一步跟网安关系暂时不大&#xff0c;是进入it行业每个人都必须掌握的基础能力。 计算机网络计算机操作系统算法与数据架构数据库 Tips:不用非要钻研至非常精通&#xff0c;可以与学习其他课程同步进行。 2.渗透技…

探索短剧市场的商机:打造短视频平台的全方位指南

目前短剧市场蓬勃发展&#xff0c;上半年备案数远超电视剧&#xff0c;彰显了短剧小程序市场潜力巨大&#xff0c;商业价值巨大。用户对短小精悍娱乐内容的需求不断增加&#xff0c;而新兴市场中有限的短剧小程序正好能够迎合这一需求。 搭建短视频平台的关键步骤&#xff1a; …

UI/UX:学习资料

网站 国内网站 UI中国 国外网站 Dribbble 书籍 交互设计之路 有更好的资料欢迎补充。随时收录&#xff0c;一起学习

算法通关村-----数论问题解析

最大公约数和最小公倍数 概念描述 最大公约数&#xff08;GCD&#xff09;是指两个或多个整数共有约数中的最大值。 最小公倍数&#xff08;LCM&#xff09;是指两个或多个整数共有的倍数中的最小值 方法介绍 碾转相除法 一种用于计算两个整数的最大公约数&#xff08;GCD…

只需十分钟快速入门Python,快速了解基础内容学习。零基础小白入门适用。

文章目录 简介特点搭建开发环境版本hello world注释文件类型变量常量数据类型运算符和表达式控制语句数组相关函数相关字符串相关文件处理对象和类连接mysql关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源…

python基础练习题库实验4

文章目录 题目1代码实验结果 题目2代码实验结果 题目3代码实验结果 题目4代码实验结果 题目5代码实验结果 题目6代码实验结果 题目总结 题目1 编写一个程序&#xff0c;使用for循环语句和字符串格式显示以下精确输出。 例如&#xff1a; 代码 for i in range(1, 11):result…

SSM框架(三):SpringMVC

文章目录 一、SpringMVC简介1.1 概述1.2 入门案例1.3 bean的加载控制1.4 PostMan插件 二、请求【页面向后台发送数据】2.1 请求映射路径2.2 请求方式2.3 解决中文乱码2.4 请求参数2.4.1 五种常见参数种类2.4.2 JSON数据2.4.3 RequestParam与RequestBody的区别2.4.4 日期类型 三…

Python生产、消费Kafka

如果想通过docker安装kafka&#xff0c;可参考 Docker安装Kafka 生产者 import json import time import tracebackfrom datetime import datetime from kafka import KafkaProducer from kafka.errors import kafka_errorsproducer KafkaProducer(bootstrap_servers[localho…

Javaweb之Vue组件库Element之Form表单的详细解析

4.3.4 Form表单 4.3.4.1 组件演示 Form 表单&#xff1a;由输入框、选择器、单选框、多选框等控件组成&#xff0c;用以收集、校验、提交数据。 表单在我们前端的开发中使用的还是比较多的&#xff0c;接下来我们学习这个组件&#xff0c;与之前的流程一样&#xff0c;我们首…

C/C++【数据结构】一文秒懂二叉树

个人主页&#xff1a;仍有未知等待探索_C语言疑难,数据结构,小项目-CSDN博客 专题分栏&#xff1a;数据结构_仍有未知等待探索的博客-CSDN博客 一、前言 树形结构是一类非常重要的非线性结构。树形结构是节点之间有分支&#xff0c;并且具有层次关系的结构&#xff0c;它类似于…

【hacker送书第3期】OpenCV轻松入门:面向Python(第2版)

第3期图书推荐 内容简介作者简介图书目录专家推荐参与方式 内容简介 本书基于面向 Python 的 OpenCV(OpenCV for Python)&#xff0c;介绍了图像处理的方方面面。本书以 OpenCV 官方文档的知识脉络为主线&#xff0c;并对细节进行补充和说明。书中不仅介绍了 OpenCV 函数的使用…