[Go版]算法通关村第十三关黄金——数字数学问题之数论问题(最大公约数、素数、埃氏筛、丑数)
目录
- 题目:辗转相除法(求最大公约数)
- 思路分析:辗转相除法(也叫欧几里得算法)`gcd(a,b) = gcd(b,a mod b)`
- 复杂度:时间复杂度 O ( n + l o g ( m a x ) ) O(n+log(max)) O(n+log(max))、空间复杂度 O ( 1 ) O(1) O(1)
- Go代码
- 题目:判断是否是素数
- 思路分析:判断n是否是素数只需测试 2 到 sqrtN 的所有可能因子 + "6K +1/-1" 规则
- 复杂度:时间复杂度 O ( s q r t ( n ) ) O(sqrt(n)) O(sqrt(n))、空间复杂度 O ( 1 ) O(1) O(1)
- Go代码
- 题目:埃氏筛
- 思路分析:埃氏筛法思想,逐步排除掉不是质数的数
- 复杂度:时间复杂度 O ( n l o g l o g n ) O(n log log n) O(nloglogn)、空间复杂度 O ( n ) O(n) O(n)
- Go代码
- 题目:判断是不是丑数
- 思路分析:循环除2 3 5 判断最后值是否==1
- 复杂度:时间复杂度 O ( l o g n ) O(log n) O(logn)、空间复杂度 O ( 1 ) O(1) O(1)
- Go代码
题目:辗转相除法(求最大公约数)
题目链接:LeetCode-1979. 找出数组的最大公约数

思路分析:辗转相除法(也叫欧几里得算法)gcd(a,b) = gcd(b,a mod b)
辗转相除法其核心部分为:若r 是a ÷ b的余数,则 gcd(a, b)=gcd(b, r)
复杂度:时间复杂度 O ( n + l o g ( m a x ) ) O(n+log(max)) O(n+log(max))、空间复杂度 O ( 1 ) O(1) O(1)
Go代码
func findGCD(nums []int) int {max, min := getMaxMin(nums)return getGcd(max, min)
}
// gcd求最大公约数
func getGcd(a int, b int) int {yu := 0for b != 0 {yu = a % b //得到余数a = b //根据辗转相除法,把被除数赋给除数b = yu //余数赋给被除数}return a //返回除数
}
func getMaxMin(nums []int) (max int, min int) {max, min = nums[0], nums[0]length := len(nums)for i:=1; i<length; i++ {if nums[i] > max {max = nums[i]}if nums[i] < min {min = nums[i]}}return
}
题目:判断是否是素数
思路分析:判断n是否是素数只需测试 2 到 sqrtN 的所有可能因子 + “6K +1/-1” 规则
复杂度:时间复杂度 O ( s q r t ( n ) ) O(sqrt(n)) O(sqrt(n))、空间复杂度 O ( 1 ) O(1) O(1)
Go代码
func isPrimes(n int) bool {if n <= 1 {return false}if n <= 3 {return true}if n%2==0 || n%3==0 {return false}// 判断n是否是素数时,只需要测试 2 到 sqrtN 的所有可能因子// max := int(math.Pow(float64(n), 0.5))max := int(math.Sqrt(float64(n)))// 根据 "6K +1/-1" 规则for i:=5; i<=max; i+=6 {// i+2 正好是 "6K +1/-1" 中的一个值if n % i == 0 || n%(i+2) == 0 {return false}}return true
}
题目:埃氏筛
题目链接:LeetCode-204. 计数质数

思路分析:埃氏筛法思想,逐步排除掉不是质数的数
如果 x 是质数,那么大于 x 的 x 的倍数 2x,3x,… 一定不是质数。

复杂度:时间复杂度 O ( n l o g l o g n ) O(n log log n) O(nloglogn)、空间复杂度 O ( n ) O(n) O(n)
- 时间复杂度分析:
- 外层循环的迭代次数是 n-2,即 O ( n ) O(n) O(n) 次。
- 内层循环的迭代次数是在素数的情况下,从 i*i 开始,每次递增 i,直到 n。这是因为小于 i 的倍数在之前已经被标记为非质数。内层循环迭代次数约为 n/i,其中 i 为质数。因此,总的迭代次数为 n/2 + n/3 + n/5 + …,这个和式是 O ( n l o g l o g n ) O(n log log n) O(nloglogn)的。
Go代码
func countPrimes(n int) int {count := 0isNotPrimes := make([]bool, n)for i:=2; i<n; i++ {if !isNotPrimes[i] {count++for j:=i*i; j<n; j+=i {isNotPrimes[j] = true}}}return count
}
或者 下面这个语言更清晰,不过多了 O ( n ) O(n) O(n)的时间复杂度
func countPrimes(n int) (count int) {isPrimies := make([]bool, n)for i, _ := range isPrimies {isPrimies[i] = true}for i:=2; i<n; i++ {// 从2开始已经把2的所有倍数标记为false,3也是,所以剩下的未标记的都是质数if isPrimies[i] {count++// 直接从i*i开始标记,因为2i,3i...这些数一定在i之前就被其他数的倍数标记过了,例如2的所有倍数,3的所有倍数等for j:=i*i; j<n; j+=i {isPrimies[j] = false}}}return
}
题目:判断是不是丑数
题目链接:LeetCode-263. 丑数

思路分析:循环除2 3 5 判断最后值是否==1
复杂度:时间复杂度 O ( l o g n ) O(log n) O(logn)、空间复杂度 O ( 1 ) O(1) O(1)
- 时间复杂度:取决于对n除以2 3 5的次数,由于每次至少将n除以2,所以除法运算的次数不会超过 O ( l o g n ) O(log n) O(logn)
Go代码
func isUgly(n int) bool {if n < 1 {return false}if n == 1 {return true}arr := [3]int{2,3,5}for _, v := range arr {for n%v == 0 {n = n/v}}return n == 1
}
相关文章:
[Go版]算法通关村第十三关黄金——数字数学问题之数论问题(最大公约数、素数、埃氏筛、丑数)
目录 题目:辗转相除法(求最大公约数)思路分析:辗转相除法(也叫欧几里得算法)gcd(a,b) gcd(b,a mod b)复杂度:时间复杂度 O ( n l o g ( m a x ) ) O(nlog(max)) O(nlog(max))、空间复杂度 O (…...
Qt双击某一文件通过自己实现的程序打开,并加载文件显示
双击启动 简述方法一方法二注意 简述 在Windows系统中,双击某类扩展名的文件,通过自己实现的程序打开文件,并正确加载及显示文件。有两种方式可以到达这个目的。 对于系统不知道的扩展名的文件,第一次打开时,需要自行…...
硬件产品的量产问题------硬件工程师在产线关注什么
前言: 产品开发测试无误,但量产缺遇到很多不良甚至DOA问题。 硬件开发过程中如何确保产线的治具、生产及硬件工程师在产线需要关注一些什么。 坚信:好的产品是要可以做出来的。 1、禁忌: 禁忌热插拔;禁忌测试不防呆…...
Vulnhub系列靶机--- Hackadmeic.RTB1
系列:Hackademic(此系列共2台) 难度:初级 信息收集 主机发现 netdiscover -r 192.168.80.0/24端口扫描 nmap -A -p- 192.168.80.143访问80端口 使用指纹识别插件查看是WordPress 根据首页显示的内容,点击target 点击…...
redis高级----------主从复制
redis的四种模式:单例模式;主从模式;哨兵模式,集群模式 一、主从模式 单例模式虽然操作简单,但是不具备高可用 缺点: 单点的宕机引来的服务的灾难、数据丢失单点服务器内存瓶颈,无法无限纵向扩…...
posgresql通过PL/pgSQL脚本统一修改某字段大小写
项目在做postgresql数据库适配时遇到了某些问题,需要统一将某个模式含id字段的全部表,将id字段由小写转换为大写,可以通过PL/pgSQL脚本实现。 先确保当前用户有足够的权限 DO $$ DECLARE current_table text;current_column text; BEGIN --…...
iPhone卫星通信SOS功能如何在灾难中拯救生命
iPhone上的卫星紧急求救信号功能在从毛伊岛野火中拯救一家人方面发挥了至关重要的作用。这是越来越多的事件的一部分,在这些事件中,iPhone正在帮助人们摆脱危及生命的情况。 卫星提供商国际通信卫星组织负责移动的高级副总裁Mark Rasmussen在接受Lifewir…...
NOIP真题答案 过河 数的划分
过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点…...
图为科技-边缘计算在智慧医疗领域的作用
边缘计算在智慧医疗领域的作用 随着科技的进步,智慧医疗已成为医疗行业的重要发展趋势。边缘计算作为新兴技术,在智慧医疗领域发挥着越来越重要的作用。本文将介绍边缘计算在智慧医疗领域的应用及其优势,并探讨未来发展方向。 一、边缘计算…...
Linux配置nginx反向代理
在云服务器上部署高并发的服务,使用Nginx作为反向代理是一种常见的做法,可以实现流量分发、负载均衡,同时提升系统的可靠性和性能。 步骤概览: 安装Nginx: 确保服务器已安装Nginx。若未安装,可使用适用于你…...
随便记录记录
统一整理一下各种 pandas读csv import pandas as pd ## 默认会将第一行作为列 df pd.read_csv(path_to_your_file.csv) ## 传递 headerNone 参数来告诉 Pandas 不要将第一行 df pd.read_csv(path_to_your_file.csv, headerNone) ## 使用多种选项来处理数据,如指…...
UbuntuDDE 23.04发布,体验DeepinV23的一个新选择
UbuntuDDE 23.04发布,体验DeepinV23的一个新选择 昨晚网上搜索了一圈,无意看到邮箱一条新闻,UbuntuDDE 23.04发布了 因为前几天刚用虚拟机安装过,所以麻溜的从网站下载了ISO文件,安装上看看。本来没多想,…...
RabbitMQ 消费者
RabbitMQ的消费模式分两种:推模式和拉模式,推模式采用Basic.Consume进行消费,拉模式则是调用Basic.Get进行消费。 消费者通过订阅队列从RabbitMQ中获取消息进行消费,为避免消息丢失可采用消费确认机制 消费者 拉模式拉模式的实…...
软件测试面试真题 | 什么是PO设计模式?
面试官问:UI自动化测试中有使用过设计模式吗?了解什么是PO设计模式吗? 考察点 《page object 设计模式》:PageObject设计模式的设计思想、设计原则 《web自动化测试实战》:结合PageObject在真实项目中的实践与应用情…...
GB2312转UTF-8部分中文乱码
现象 最近写了个txt导入,客户反馈有时候导入的数据,会出现个别中文乱码的现象,但是我之前已经做过编码转换处理了,统一转成了UTF-8。 比如“鞠婧祎”,导入进来是这样: 排查思路 首先看了一下这个文本的编码格式&am…...
项目——电子词典(客户端、服务器交互,字典导入,单词查询)
一、项目要求 登录注册功能,不能重复登录,重复注册单词查询功能历史记录功能,存储单词,意思,以及查询时间基于TCP,支持多客户端连接采用数据库保存用户信息与历史记录将dict.txt的数据导入到数据库中保存。…...
jenkins 是什么?
一、jenkins 是什么? Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行&#…...
无涯教程-PHP - sql_regcase()函数
sql_regcase() - 语法 string sql_regcase (string string) 可以将sql_regcase()函数视为实用程序函数,它将输入参数字符串中的每个字符转换为包含两个字符的带括号的表达式。 sql_regcase() - 返回值 返回带括号的表达式字符串以及转换后的字符。 sql_regcase…...
cesium 实现鼠标中键拖动地图
cesium默认左键拖动地图,中键旋转,再绘图时带来诸多不便。所以改成鼠标中键按下拖动地图,鼠标左键选点。代码如下:【感谢chatGPT】 //改为中建拖动// 假设 viewer 是你的 Cesium Viewer 实例const cameraController viewer.scene…...
低压风机单片机方案
低压风机通常由电机、转子、机壳、进气管、出气管、齿轮和减速机等组成。电机带动转子旋转,旋转的转子带动齿轮和减速机转动,进而形成空气被吸入转子内部,通过旋转而产生的离心力把气体压缩,并将气体排出。 低压风机方案的主控型…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
