【算法】数学相关知识总结

文章目录

  • gcd 和 lcm
  • 取模运算 %
  • 求一个点和一片矩形区域之间的最短距离

本文用于记录一些关于算法题中偶尔被使用到的数学相关知识。

gcd 和 lcm

gcd 和 lcm 分别是 最大公约数(Greatest common divisor) 和 最小公因数(Least Common Multiple)。

常用的 gcd 算法使用的是欧几里得算法,也就是辗转相除算法。原理如下:

1.有两个数a和b,我们把较大的数传给maxn,较小的数传给minx
2.用maxn对minx进行取余运算,如果余数为0,那么a,b的最大公约数为a,
3.若余数不为0,a,b的最大公约数为minx和余数的最大公约数,我们在循环到第一步进行计算。

将算法描述翻译成代码如下:

public int gcd(int a, int b) {
    if (a < b) return gcd(b, a);    // 确保 a 是较大的数字
    while (a % b != 0) {	// 一直相除到余数为 0
        int t = a % b;		// 求余数
        a = b;	// 
        b = t;	// 
    }
    return b;
}

推荐写法
经过精简之后可以写成如下形式(原理是一样的,只不过从迭代改成了递归的形式,代码会更短一些。)(或者可以这样来理解这种写法基于的一个事实:对于任何两个整数a和b,gcd(a, b)和gcd(b, a % b)是相同的

public int gcd(int a, int b) {
    return b != 0? gcd(b, a % b): a;
}

此外还有一种 if + while + 位运算的写法:

public int gcd(int a, int b) {
    if (b != 0) {
        while ((a %= b) != 0 && (b %= a) != 0);
    }
    return a + b;
}

通过使用 System.currentTimeMillis() 来测算程序运行的时间,可以发现后两种写法的耗时要短一些。(后两种的速度差不多都是第一种 while 循环的两倍左右

最大公约数与质数的关系:通过判断两个或者多个整数之间的公约数只有1,就可以说它们是互质的。


lcm 的写法在 gcd 的基础之上,即两个数相乘然后除最大公约数即为最小公倍数

public int lcm(int a, int b) {
    return a * b / gcd(a, b);
}

参考资料:
gcd和lcm(最大公约数,最小公倍数)
【C++】gcd函数的写法
D351周赛复盘:美丽下标对数目(互质/数学运算)+数组划分若干子数组

取模运算 %

如果让你计算 1234 ∗ 6789 1234 * 6789 12346789个位数,你会如何计算?
由于只有个位数会影响到乘积的个位数,因此 4 ∗ 9 = 36 4 * 9 = 36 49=36 的个位数 6 就是答案。

将这个结论抽象成数学等式如下:

( a + b )   m o d   m = ( ( a   m o d   m ) + ( b   m o d   m ) )   m o d   m (a + b) \bmod m = ((a \bmod m) + (b \bmod m)) \bmod m (a+b)modm=((amodm)+(bmodm))modm
( a ∗ b )   m o d   m = ( ( a   m o d   m ) ∗ ( b   m o d   m ) )   m o d   m (a * b) \bmod m = ((a \bmod m) * (b \bmod m)) \bmod m (ab)modm=((amodm)(bmodm))modm

在这里插入图片描述
参考资料:
https://leetcode.cn/problems/movement-of-robots/solution/nao-jin-ji-zhuan-wan-pai-xu-tong-ji-pyth-we55/

求一个点和一片矩形区域之间的最短距离

以一道题目为例:https://leetcode.cn/problems/circle-and-rectangle-overlapping/

在这里插入图片描述
在这里插入图片描述

class Solution {
    public boolean checkOverlap(int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2) {
        double dist = 0;
        if (xCenter < x1 || xCenter > x2) {
            dist += Math.min(Math.pow(x1 - xCenter, 2), Math.pow(x2 - xCenter, 2));
        }
        if (yCenter < y1 || yCenter > y2) {
            dist += Math.min(Math.pow(y1 - yCenter, 2), Math.pow(y2 - yCenter, 2));
        }
        return dist <= radius * radius;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习——决策树算法

一、实验目的 掌握如何实现决策树算法&#xff0c;用并决策树算法完成预测。 二、实验内容 本次实验任务我们使用贷款申请样本数据表&#xff0c;该数据表中每列数据分别代表ID、年龄、高薪、有房、信贷情况、类别&#xff0c;我们根据如下数据生成决策树&#xff0c;使用代…

二值化的mask生成yolov5-7.0的实例分割训练标签

背景&#xff1a;要用yolov5-7.0训练分割&#xff0c;这里使用自己的数据&#xff0c;mask是二值化的数据&#xff0c;要先转换成COCO格式&#xff0c;这里用imantics实现。 详见&#xff1a;https://zhuanlan.zhihu.com/p/427096258 截取部分代码如下图&#xff0c;读取image图…

ninja的简单使用

文章目录 Ninja安装windows环境Linux环境 入门使用与CMake一起使用 Ninja安装 windows环境 问题的解决通常有多种方法。按照结果的好坏程度&#xff0c;可以将解决方法简单的划分为&#xff0c;上中下三个层次&#xff0c;见:为什么谋士总喜欢提上中下三策&#xff1f; 在w…

C++静态和动态链接库导出和使用

1、简介 代码开发过程中会遇到很多已有的函数库&#xff0c;这些函数库是现有的&#xff0c;成熟的&#xff0c;可以复用的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个人的代码都从零开始&#xff0c;因此库的存在意义非同寻常。 本质上来说库是一种…

在 K8S 中部署一个应用 上

本身在 K8S 中部署一个应用是需要写 yaml 文件的&#xff0c;我们这次简单部署&#xff0c;通过拉取网络上的镜像来部署应用&#xff0c;会用图解的方式来分享一下&#xff0c;过程中都发生了什么 简单部署一个程序 我们可以通过 kubectl run 的方式来简单部署一个应用&#…

测试技术体系

目录&#xff1a; 软件测试分类分层测试体系 1.软件测试分类 软件测试的分类_安全性测试属于功能测试吗_阿瞒有我良计15的博客-CSDN博客 1.单元测试&#xff08;Unit Testing&#xff09;&#xff1a;单元测试是指对软件的最小可测试单元进行测试&#xff0c;例如一个函数、一…

ES+Redis+MySQL,这个高可用架构设计

一、背景 会员系统是一种基础系统&#xff0c;跟公司所有业务线的下单主流程密切相关。如果会员系统出故障&#xff0c;会导致用户无法下单&#xff0c;影响范围是全公司所有业务线。所以&#xff0c;会员系统必须保证高性能、高可用&#xff0c;提供稳定、高效的基础服务。 …

macOS Ventura 13.4.1 (22F82) Boot ISO 原版可引导镜像下载

macOS Ventura 13.4.1 (22F82|22F2083) Boot ISO 原版可引导镜像下载 本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也支持在 Wind…

TSception:从EEG中捕获时间动态和空间不对称性用于情绪识别

TSception&#xff1a;从EEG中捕获时间动态和空间不对称性用于情绪识别&#xff08;论文复现&#xff09; 摘要模型结构代码实现写在最后 **这是一篇代码复现&#xff0c;原文通过Pytorch实现&#xff0c;本文中使用Keras对该结构进行复现。**该论文发表在IEEE Transactions on…

Spark10-11

10. 广播变量 10.1 广播变量的使用场景 在很多计算场景&#xff0c;经常会遇到两个RDD进行JOIN&#xff0c;如果一个RDD对应的数据比较大&#xff0c;一个RDD对应的数据比较小&#xff0c;如果使用JOIN&#xff0c;那么会shuffle&#xff0c;导致效率变低。广播变量就是将相对…

Spring Boot 如何使用 @ExceptionHandler 注解处理异常消息

Spring Boot 如何使用 ExceptionHandler 注解处理异常消息 在 Spring Boot 应用程序中&#xff0c;异常处理是非常重要的一部分。当应用程序出现异常时&#xff0c;我们需要能够捕获和处理这些异常&#xff0c;并向用户提供有用的错误消息。在 Spring Boot 中&#xff0c;可以…

二叉平衡树之红黑树

目录 1.概念 2.性质 3.节点的定义 4.插入 1.按照二叉搜索树规则插入结点 2.调整颜色 1.uncle存在且为红色 2.uncle不存在或者为黑 cur为 3.根节点改为黑色 5.验证 6.比较 7.应用 1.概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存…

2023年5月青少年机器人技术等级考试理论综合试卷(五级)

青少年机器人技术等级考试理论综合试卷&#xff08;五级&#xff09; 分数&#xff1a; 100 题数&#xff1a; 30 一、 单选题(共 20 题&#xff0c; 每题 4 分&#xff0c; 共 80 分) 1.ESP32 for Arduino&#xff0c; 下列程序的运行结果是&#xff1f; &#xff08; &#x…

浅谈无线测温系统在高压开关柜中的应用

关注acrelzxz&#xff0c;了解更多详情 摘要&#xff1a;高压开关柜是配电系统中重要的组成部分&#xff0c;其主要作用是控制电荷、分配电能和开断电流等&#xff0c;对维持系统的稳定性有一定的保障作用。将无线测温技术应用于高压开关柜&#xff0c;可以实现对其进行实时的…

校园外卖行业内卷之下,高校外卖创业者如何成为卷王?

伴随着外卖行业的不断发展&#xff0c;校园市场前景广阔。校园外卖市场因各大平台的竞争而变得越来越复杂。各种技术支持和经验参考让大学生创业校园外卖越来越困难&#xff0c;市场竞争也越来越激烈。 校园外卖市场究竟有多内卷&#xff1f; 外卖龙头企业。 校园市场广阔的发…

【高危】crypto-js<3.2.1 存在不安全的随机性漏洞

漏洞描述 crypto-js 是一个 JavaScript 加密库&#xff0c;用于在浏览器和 Node.js 环境中执行加密和解密操作。 crypto-js 3.2.1 之前版本中的 secureRandom 函数通过将字符串 0. 和三位随机整数拼接的格式生成加密字符串&#xff0c;攻击者可通过爆破破解加密字符。 漏洞…

Oracle 查询优化改写(第五章)

第五章 使用字符串 1.遍历字符串 SELECT 天天向上 内容&#xff0c;level&#xff0c;substr(天天向上, LEVEL, 1) 汉字拆分FROM Dual CONNECT BY LEVEL < Length(天天向上);2.计算字符在字符串中出现的次数 3.从字符中删除不需要的字符 若员工姓名有元音字母AEIOU&#x…

RPC远程调用

简介 PRC是一种调用方式而不是一种协议 在本地调用方式时由于方法在同一个内存空间&#xff0c;所以程序中可以直接调用该方法&#xff0c;但是浏览器端和服务端程序是不在一个内存空间的&#xff0c;需要使用网络来访问&#xff0c;就需要使用TCP或者UDP协议&#xff0c;由于…

STM32实现延时

在STM32单片机中&#xff0c;实现延时一般都是使用定时器&#xff0c;既可以使用Systick定时器&#xff0c;也可以使用常规的定时器。 定时器在设置了定时并开启之后&#xff0c;就会进入自主运行模式&#xff0c;其中&#xff0c;初始化设置这一阶段是由CPU执行相应指令完成的…

ubuntu双系统安装

1. 下载系统 国内镜像 http://mirrors.ustc.edu.cn/ubuntu-releases/2. U盘启动盘 Rufus 软件 制作U盘启动盘 Rufus 链接 https://rufus.en.softonic.com/3. 磁盘中准备一定未分配磁盘 我准备了100G 4. BIOS启动项选择为usb启动&#xff08;每个品牌进BIOS不同&#xff0…
最新文章