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

算法中常用到的数学知识:埃拉托色尼筛法(获取质数)、欧几里得算法(求两个数最大公因数)

不管是在项目中还是面试时,一定的算法能力都是极其重要的。大多数算法只要有一定的基础,给足够的时间是可以写出来的,然而有一类算法,说难也不难,说简单也不简单,这种算法通常涉及到某种数学知识,如果了解这种知识那写出来就是易如反掌,而没了解过相应知识的就只能使用暴力解法,数据稍微多一点就超时,甚至暴力都写不出来。本文就给大家讲解一下两种相关的数学知识。

1.埃拉托色尼筛法

适用场景:

        获取一段数字中所有的质数。

基本步骤:

        1.创建一个列表:首先,创建一个从2开始到你想要检查的数n(包括n)的连续整数列表。

        2.标记第一个数:从列表中的第一个数2开始,因为它是第一个质数。

        3.划除倍数:从2的下一个数开始,标记2的所有倍数。因为这些数都可以被2整除,所以它们不是质数。

        4.移动到下一个未标记的数:在列表中找到下一个未被划除的数,这个数就是下一个质数。对于这个新的质数,重复步骤3,划除它的所有倍数。

        5.重复步骤:继续这个过程,每次都找到下一个未被划除的数,并划除它的所有倍数,直到你处理完所有小于或等于√n的数。因为一个数必须有一个因数小于或等于它的算数平方根。

        6.剩余的数:列表中未被划除的数就是质数。

        7.结束:当处理完所有小于或等于√n的数后,列表中剩余的未被划除的数就是范围内的质数。

基本代码:
//本段代码是我自己写的,不一定标准,有需要的同学可以自己查标准的写法。
let arr=[]
for(let i=2;i<=100;i++){//模拟一个2到100的数组arr.push(i)
}
let l=0,r=Math.ceil(Math.pow(arr[arr.length-1],1/2))//l为第一个质数的索引,r为最后一个数开方向上取整
while(arr[l]<=r){//外层循环从第一个数到最后一个数的开方向上取整for(let i=l+1;i<arr.length;i++){//内层循环是整个数组if(arr[i]%arr[l]===0){//判断该数能否整除第一个质数,能的话就从数组中删除,并且索引减一(因为for循环后面有一个加一,删除后不减一就会跳过一个数字)arr.splice(i,1)i--}}l++//内循环结束后第一个质数后移一位
}
console.log(arr)

打印结果为[2,100]内所有质数

 说明:

        大家看到这应该会有很多疑问,比如:如果开头不是2怎么办,开头不是质数怎么办等等。我的理解只能将数组左侧扩充到2,然后在判断过程中加上对原来范围的控制,因为寻找质数的暴力方法只能是从2开始一个一个相除,所以该方法在寻找范围内所有质数在时间复杂度上已经有了很大的提升。

2.欧几里得算法,又名辗转相除法

适用场景:

        求两个数最大公因数

基本步骤:

        1.寻找两个数的较大数。

        2.使用较大数除以较小数,再使用本次计算中的除数除以余数

        3.重复步骤2,当余数为0时,本次计算的除数就是两个数最大公约数。

基本代码:
let a=12,b=18//任意定义两个数,为了方便所以定义的比较小,c为计算过程中的余数
if(b>a)[a,b]=[b,a]//保证a是较大数
while(1){//死循环,因为最大公因数一定有值,最小也是1let c=a%bif(c===0){//当余数为0就跳出循环,否则修改a和b的值,继续循环break}a=bb=c
}
console.log(b)//最后一次计算的除数就是最大公因数:6

相关文章:

算法中常用到的数学知识:埃拉托色尼筛法(获取质数)、欧几里得算法(求两个数最大公因数)

不管是在项目中还是面试时&#xff0c;一定的算法能力都是极其重要的。大多数算法只要有一定的基础&#xff0c;给足够的时间是可以写出来的&#xff0c;然而有一类算法&#xff0c;说难也不难&#xff0c;说简单也不简单&#xff0c;这种算法通常涉及到某种数学知识&#xff0…...

实战OpenCV之人脸识别

基础入门 随着计算机视觉技术和深度学习的发展,人脸识别已经成为一项广泛应用的技术,涵盖了从安全监控、身份验证、智能家居到大型公共安全项目等多个领域。 人脸识别技术通常包括以下几个主要步骤。 图像采集:通过摄像头或其他图像采集设备,捕获包含人脸的图像或视频帧。 …...

图像预处理之图像滤波

目录 图像滤波概览 均值滤波&#xff08;Mean Filter&#xff09; 中值滤波&#xff08;Median Filter&#xff09; 高斯滤波&#xff08;Gaussian Filter&#xff09; 双边滤波&#xff08;Bilateral Filter&#xff09; 方框滤波&#xff08;Box Filter&#xff09; S…...

【通俗理解】隐变量的变分分布探索——从公式到应用

【通俗理解】隐变量的变分分布探索——从公式到应用 关键词提炼 #隐变量 #变分分布 #概率模型 #公式推导 #期望最大化 #机器学习 #变分贝叶斯 #隐马尔可夫模型 第一节&#xff1a;隐变量的变分分布的类比与核心概念【尽可能通俗】 隐变量的变分分布就像是一场“捉迷藏”游戏…...

PyTorch 分布式并行计算

0. Abstract 使用 PyTorch 进行多卡训练, 最简单的是 DataParallel, 仅仅添加一两行代码就可以使模型在多张 GPU 上并行地计算. 但它是比较老的方法, 官方推荐使用新的 Distributed Data Parallel, 更加灵活与强大: 1. Distributed Data Parallel (DDP) 从一个简单的非分布…...

[cg] vulkan external_memory

最近在写硬件编码的代码&#xff0c;渲染器渲染出的RT需要给到编码器做硬编&#xff0c;有两种方法能做。 一是通过 map的方式&#xff0c;把显存里的数据读到cpu&#xff0c;拷贝一份cpu data给编码器&#xff0c;但这种方式会有内存拷贝的开销。所以&#xff0c;我们思考是否…...

如何使用Python代码实现给GPU预加热

如何使用Python代码实现给GPU预加热 一、引言二、使用深度学习框架进行预加热2.1 TensorFlow预加热2.2 PyTorch预加热三、使用CUDA进行预加热四、预加热的效果评估与优化五、结论与展望在高性能计算和深度学习领域,GPU(图形处理器)已经成为不可或缺的加速工具。然而,在实际…...

硬件知识 cadence16.6 原理图输出为pdf 网络名下划线偏移 (ORCAD)

1. cadence原理图输出为PDF网络名下划线偏移 生这种情况的原因 1. 设计的原理图图纸大小比正常的 A4图纸大。 2. 打印为PDF 的时候&#xff0c;打印机的设置有问题。 2.cadence原理图输出为 PDF网络名下划线偏移的情况 可以看到上图&#xff0c;网络名往上漂移。 3. 解决办法 …...

ffmpeg视频滤镜:提取缩略图-framestep

滤镜描述 官网地址 > FFmpeg Filters Documentation 这个滤镜会间隔N帧抽取一帧图片&#xff0c;因此这个可以用于设置视频的缩略图。总体上这个滤镜比较简单。 滤镜使用 滤镜参数 framestep AVOptions:step <int> ..FV....... set frame st…...

RecyclerView详解——(四)缓存复用机制

稍微看了下源码和部分文章&#xff0c;在此做个小小的总结 RecyclerView&#xff0c;意思为可回收的view&#xff0c;那么相对于listview&#xff0c;他的缓存复用肯定是一大优化。 具体而言&#xff0c;当一个列表项被移出屏幕后&#xff0c;RecyclerView并不会销毁其视图&a…...

进程 系统调用 中断

进程P通过执行系统调用从键盘接收一个字符的输入&#xff0c;已知此过程中与进程P相关的操作包括&#xff1a; ①将进程P插入就绪队列&#xff1b; ②将进程P插入阻塞队列&#xff1b; ③将字符从键盘控制器读入系统缓冲区&#xff1b; ④启动键盘中断处理程序&#xff1b; …...

演讲回顾丨杭州悦数 CTO 叶小萌:图数据库发展新航向——拥抱 GQL,融合 HTAP,携手 AI

本文为杭州悦数 CTO 叶小萌在“标准智能&#xff1a;新质生产力的原动力”悦数图数据库新产品发布会上的演讲回顾&#xff0c;主题为&#xff1a;《新标准、新期待&#xff1a;展望图数据库发展的关键方向》 各位嘉宾、悦数图数据库的用户以及线上的观众朋友们大家好&#xff0…...

Java安全—JNDI注入RMI服务LDAP服务JDK绕过

前言 上次讲到JNDI注入这个玩意&#xff0c;但是没有细讲&#xff0c;现在就给它详细地讲个明白。 JNDI注入 那什么是JNDI注入呢&#xff0c;JNDI全称为 Java Naming and Directory Interface&#xff08;Java命名和目录接口&#xff09;&#xff0c;是一组应用程序接口&…...

C++:设计模式-单例模式

单例模式&#xff08;Singleton Pattern&#xff09;是一种设计模式&#xff0c;确保一个类只有一个实例&#xff0c;并且提供全局访问点。实现单例模式的关键是防止类被多次实例化&#xff0c;且能够保证实例的唯一性。常见的实现手法包括懒汉式、饿汉式、线程安全的懒汉式等。…...

Softing工业将OPC UA信息建模集成到边缘应用和安全集成服务器中

Softing工业宣布将OPC UA&#xff08;统一架构&#xff09;信息建模集成到其边缘产品系列及安全集成服务器&#xff08;SIS&#xff09;中&#xff0c;这一技术进步使得在工业物联网&#xff08;IIoT&#xff09;应用中的数据集成、交换与控制更加无缝、有效。 &#xff08;OPC…...

WPF中如何让Textbox显示为一条直线

由于Textbox直接使用是一条直线 设置如下代码 可以让Textbox变为直线输入 <Style TargetType"TextBox"x:Key"UsernameTextBoxStyle"><Setter Property"Template"><Setter.Value><ControlTemplate TargetType"{x:Typ…...

VSCode汉化教程【简洁易懂】

我们安装完成后默认是英文界面。 找到插件选项卡&#xff0c;搜索“Chinese”&#xff0c;找到简体&#xff08;更具你的需要&#xff09;&#xff08;Microsoft提供&#xff09;Install。 安装完成后选择Change Language and Restart。...

跨平台多开账号防关联:轻松管理多个账号!

对于跨境电商、独立站以及社媒营销领域&#xff0c;如何高效管理多个账号、确保账号安全是企业面临的重大挑战。那么如何仅用一台电脑就能实现跨平台多开账号呢&#xff1f; 一、为什么需要跨平台多开账号并防关联&#xff1f; 1. 品牌推广&#xff1a;不同平台拥有不同的用户…...

DICOM图像处理:深入解析DICOM彩色图像中的Planar配置及其对像素数据解析处理的实现

引言 在DICOM(Digital Imaging and Communications in Medicine)标准中,彩色图像的存储与显示涉及多个关键属性,其中**Planar Configuration(平面配置)**属性(标签 (0028,0006))尤为重要。当遇到彩色DICOM图像在浏览时被错误地分割为9张小图,而实际应显示为一…...

jupyter notebook的 markdown相关技巧

目录 1 先选择为markdown类型 2 开关技巧 2.1 运行markdown 2.2 退出markdown显示效果 2.3 注意点&#xff1a;一定要 先选择为markdown类型 3 一些设置技巧 3.1 数学公式 3.2 制表 3.3 目录和列表 3.4 设置各种字体效果&#xff1a;加粗&#xff0c;斜体&#x…...

受够了网盘限速?2026年更顺手的不限速同步盘选择

受够了网盘限速、下载慢、传大文件卡顿&#xff1f;如果你的核心诉求是“上传下载不被限速、同步稳定、多人协作更省心”&#xff0c;下面这4款网盘可以作为备选参考。本文以“传输体验 同步效率 安全合规 协作能力”做客观对比&#xff0c;方便你按需选择。 先看对比表&am…...

标准化封装国产电源:钡特电源 VB50-24S24LD 与金升阳 URB2424LD-50WR3 同属工业高可靠

在工业电子系统设计中&#xff0c;工业 DC-DC 电源模块作为核心供电单元&#xff0c;其标准化程度、稳定性及适配性直接影响设备整体可靠性与研发效率。钡特电源 VB50-24S24LD 与金升阳 URB2424LD-50WR3 作为 50W 级国产工业 DC-DC 代表产品&#xff0c;均采用国际标准封装引脚…...

Midjourney大画幅风格实战手册(从失效黑边到完美展陈:2023全球TOP 50商业项目验证的7大避坑节点)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Midjourney大画幅风格的本质解构与视觉范式跃迁 大画幅风格并非单纯指图像物理尺寸的放大&#xff0c;而是Midjourney通过隐式参数空间重构所催生的一种高密度视觉语义范式——它融合了胶片颗粒质感、景深压缩…...

图片跨域之谜:img 标签真的“畅通无阻”吗

&#x1f5bc;️ 图片跨域之谜&#xff1a;img 标签真的“畅通无阻”吗&#xff1f; &#x1f914; 核心疑问 在前端开发中&#xff0c;我们常听到“同源策略”限制了跨域请求。但是&#xff0c;当你直接在 HTML 中写 <img src"https://other-domain.com/logo.png&qu…...

保姆级教程:在Ubuntu上拆解和重组RK356x的update.img固件包

深度解析&#xff1a;Ubuntu环境下RK356x固件逆向工程与定制化实践 引言 在嵌入式开发领域&#xff0c;瑞芯微RK356x系列芯片因其出色的性能和丰富的接口资源&#xff0c;已成为智能硬件开发的热门选择。然而&#xff0c;官方提供的固件包往往无法完全满足特定项目的需求&#…...

中兴B863AV3.2-M刷机避坑指南:S905L3A芯片识别、固件选择与Amlogic USB Burning Tool 2.2.0配置详解

中兴B863AV3.2-M刷机全流程精解&#xff1a;从芯片识别到固件烧录的进阶实践 在智能电视盒的玩家圈子里&#xff0c;中兴B863AV3.2-M因其出色的硬件配置和可玩性备受关注。这款搭载Amlogic S905L3A芯片的设备&#xff0c;通过刷机可以解锁更多功能&#xff0c;但过程中暗藏的&q…...

52DH Pro网址导航系统开源版

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 这款导航系统是基于 SiteHub 二次开发的网址导航系统&#xff0c;拥有独立前台和拟态风格的后台管理中心。我爱导航系统 (52DH Pro 网址导航系统) 集合网上优质网站网址导航&#xff0c;…...

程序员需求攀升:数字化浪潮下的行业必然

在数字经济深度渗透的今天&#xff0c;软件开发行业正经历着前所未有的扩张期&#xff0c;程序员岗位需求的持续攀升成为行业发展的鲜明特征。作为与开发环节紧密联动的测试从业者&#xff0c;深入理解这一现象背后的逻辑&#xff0c;不仅能帮助我们把握行业趋势&#xff0c;更…...

MySQL 9.0安装教程:免费数据库软件,科研数据管理必备

做科研的朋友&#xff0c;应该都有这个经历。以前用Excel打开数据文件&#xff0c;几秒钟就出来了。现在呢&#xff1f;几十万行的数据表&#xff0c;打开转半天圈&#xff0c;筛选一下直接未响应。保存一次要等好久&#xff0c;生怕电脑死机。不是你的电脑不行&#xff0c;是数…...

从 AI 工具到音乐生态:可酷加速布局,构建数字音乐全新基础设施

当数字音乐行业从流量竞争迈入生态竞争的新阶段&#xff0c;单一产品的功能边界已难以支撑企业长期增长&#xff0c;完善的生态协同能力逐渐成为企业突围的核心竞争力&#xff0c;也成为定义行业未来格局的关键变量。在此背景下&#xff0c;可酷公司近日对外披露其全新发展战略…...