寻找丑数.

devtools/2024/11/25 11:50:36/

丑数(Ugly Number)是指只包含质因数2、3和5的正整数。寻找第n个丑数.

解读题目,第n个丑数一定是由前n-1个数中的某三个丑数分别乘以2,3,5所得到的小数.

定义函数如下:

函数is_ugly(num):用于判断一个数是否是丑数,它接受一个整数num作为参数如果num小于1,直接返回False,因为丑数是正整数。然后,它遍历质因数2、3、5,通过不断地除以这些质因数来减少num,直到num不能被这些质因数整除。如果最终num等于1,说明它只包含2、3、5作为质因数,返回True;否则返回False

  1. 函数nth_ugly_number(n):这个函数用于找到第n个丑数。它接受一个整数n作为参数,表示要找到的丑数的位置。如果n小于或等于0,返回空列表,因为不存在负数或零个丑数。初始化一个列表uglies,用来存储找到的丑数,初始值为[1],因为1是第一个丑数。初始化一个计数器count,用来记录已经找到的丑数数量。初始化一个列表next_uglies,用来存储下一个可能的丑数,初始值为[1, 2, 3],因为它们是最小的三个丑数。使用while循环,直到找到第n个丑数。在每次循环中,找到next_uglies中的最小值,这是下一个丑数,将其添加到uglies列表中,并更新计数器count。从next_uglies中移除已经使用过的丑数。扩展next_uglies列表,通过将当前的丑数乘以2、3、5来生成新的丑数,并添加到next_uglies中。保持next_uglies列表有序,以便每次都能找到最小的下一个丑数,最后,返回uglies列表中的最后一个元素,即第n个丑数。

完整代码如下:

python">def is_ugly(num):if num < 1:return Falsefor prime in [2, 3, 5]:while num % prime == 0 and num > 0:num //= primereturn num == 1def nth_ugly_number(n):if n <= 0:return []uglies = [1]count = 1next_uglies = [1, 2, 3]  # 初始丑数序列while count < n:# 找到下一个丑数next_ugly = min(next_uglies)uglies.append(next_ugly)count += 1# 从next_uglies中移除已经使用过的丑数next_uglies.remove(next_ugly)# 扩展next_uglies列表for prime in [2, 3, 5]:next_ugly = next_ugly * primenext_uglies.append(next_ugly)# 保持next_uglies列表有序next_uglies.sort()return uglies[-1]# 示例:找到第150个丑数
print(nth_ugly_number(150))


http://www.ppmy.cn/devtools/136830.html

相关文章

【漏洞复现】广州锦铭泰软件 F22服装管理软件系统 Load.ashx 任意文件读取漏洞

免责声明: 本文旨在提供有关特定漏洞的信息,以帮助用户了解潜在风险。发布此信息旨在促进网络安全意识和技术进步,并非出于恶意。读者应理解,利用本文提到的漏洞或进行相关测试可能违反法律或服务协议。未经授权访问系统、网络或应用程序可能导致法律责任或严重后果…

高性能服务器模型之Reactor(单线程版本)

一、概念 Reactor模型是一种事件驱动的设计模式&#xff0c;用于处理并发I/O操作。其核心思想是将I/O事件的监听和实际的I/O操作分离开来&#xff0c;由事件循环&#xff08;Event Loop&#xff09;负责监听I/O事件&#xff0c;当事件发生时&#xff0c;将事件分发给相应的事件…

第21周:机器学习

目录 摘要 Abstract 一、ARIMA模型 1、时间序列模型 &#xff08;1&#xff09;时间序列的分析方法 &#xff08;2&#xff09;时间序列的预处理 &#xff08;3&#xff09;ARIMA模型的引入 2、AR模型 3、MA模型 4、小结 二、K-means聚类算法 三、实验 1、数据处…

一加ACE 3 Pro手机无法连接电脑传输文件问题

先说结论&#xff1a;OnePlus手机无法连接电脑传输数据的原因&#xff0c;大概率是一加数据线的问题。尝试其他手机品牌的数据线&#xff08;比如华为&#xff09;&#xff0c;再次尝试。 连接电脑方法&#xff1a; 1 打开开发者模式&#xff08;非必要操作&#xff09; 进入…

Axios案例练习

使用原生的Ajax请求还是比较繁琐&#xff0c;所以说一般使用Axios&#xff0c;Axios是对于Ajax的封装&#xff0c;主要是为了简化书写。 Axios使用比较简单&#xff0c;主要分为两步&#xff1a; 1.在script标签的src中引入Axios文件 特别注意&#xff0c;这里是需要一对单独的…

详细描述一下Elasticsearch搜索的过程?

大家好&#xff0c;我是锋哥。今天分享关于【详细描述一下Elasticsearch搜索的过程?】面试题。希望对大家有帮助&#xff1b; 详细描述一下Elasticsearch搜索的过程? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Elasticsearch 是一个基于 Apache Lucene 构建的…

UE5材质篇5 简易水面

不得不说&#xff0c;UE5里搞一个水面实在是相比要自己写各种反射来说太友好了&#xff0c;就主要是开启一堆开关&#xff0c;lumen相关的&#xff0c;然后稍微连一些蓝图就几乎有了 这里要改一个shading model&#xff0c;要这个 然后要增加一个这个node 并且不需要连接base …

深入分析:固定参考框架在RViz中的作用与对数据可视化的影响 ros ubuntu20.04

深入分析&#xff1a;固定参考框架在RViz中的作用与对数据可视化的影响 RViz (Robot Visualization) 是 ROS (Robot Operating System) 中一种重要的三维可视化工具&#xff0c;主要用于实时观察和分析传感器数据、机器人状态信息以及环境模型。RViz的核心功能之一是固定参考框…