UVa 136 Ugly Numbers
题目描述“丑数”Ugly Numbers\texttt{Ugly Numbers}Ugly Numbers是指那些质因数只包含222、333或555的正整数。通常约定111也算作丑数。前111111个丑数为1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, … 1,\ 2,\ 3,\ 4,\ 5,\ 6,\ 8,\ 9,\ 10,\ 12,\ 15,\ \dots1,2,3,4,5,6,8,9,10,12,15,…本题要求编写程序找出并输出第150015001500个丑数。输入格式无输入。输出格式输出一行格式为The 1500th ugly number is number.其中number应替换为计算出的第150015001500个丑数。题目分析我们需要生成一个序列序列中的每个数都满足其质因数只包含222、333、555。换句话说对于任意丑数nnn存在非负整数aaa、bbb、ccc使得n2a×3b×5c n 2^a \times 3^b \times 5^cn2a×3b×5c本题的核心在于按顺序生成丑数并找到第150015001500个。解题思路方法一模拟法朴素判断一种直接的方法是从111开始逐个判断每个正整数是否为丑数直到找到第150015001500个为止。判断丑数的方法将该数不断除以222、333、555直到不能再被这三个数整除。若最终结果为111则该数是丑数。优点实现简单易于理解。缺点效率较低因为需要检查很多非丑数。不过对于第150015001500个丑数其值并不大约为8.5×1058.5 \times 10^58.5×105。时间复杂度O(nlog⁡n)O(n \log n)O(nlogn)其中nnn是第150015001500个丑数的值。方法二优先队列法高效生成我们可以利用最小堆优先队列来按顺序生成丑数初始化一个最小堆将111压入堆中。每次从堆中取出最小元素xxx它就是当前最小的丑数。将x×2x \times 2x×2、x×3x \times 3x×3、x×5x \times 5x×5压入堆中若尚未出现过。用一个集合记录已生成的丑数避免重复入堆。重复上述过程直到取出第150015001500个丑数。优点只生成丑数无需判断非丑数效率高。缺点需要额外的数据结构堆和集合。时间复杂度O(nlog⁡n)O(n \log n)O(nlogn)其中n1500n 1500n1500。代码实现方法一代码模拟法// Ugly Numbers// UVa ID: 136// Verdict: Accepted// Submission Date: 2016-01-08// UVa Run Time: 0.000s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;intmain(){longlongintstart1;intcounter1;while(counter1500){start;longlongintnumberstart;while(number%20)number/2;while(number%30)number/3;while(number%50)number/5;if(number1)counter;}coutThe 1500th ugly number is start.endl;return0;}方法二代码优先队列法// Ugly Numbers// UVa ID: 136// Verdict: Accepted// Submission Date: 2016-01-08// UVa Run Time: 0.000s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;typedeflonglongintbigNumber;intmain(){intfactors[3]{2,3,5};setbigNumberuglyNumbers;priority_queuebigNumber,vectorbigNumber,greaterbigNumbercandidates;candidates.push(1);for(inti1;i1500;i){bigNumber top;do{topcandidates.top();candidates.pop();}while(uglyNumbers.count(top)0);uglyNumbers.insert(top);for(intj0;j3;j){bigNumber nexttop*factors[j];if(uglyNumbers.count(next)0)candidates.push(next);}if(i1500){coutThe 1500th ugly number is top.endl;break;}}return0;}总结本题展示了两种生成丑数的方法模拟法简单直接适合输入规模不大的情况。优先队列法高效且可扩展适合需要生成大量丑数的场景。两种方法均能快速通过输出结果一致。对于此类“按条件生成序列”的问题优先队列法是一种非常实用的技巧。最终答案第150015001500个丑数为859963392859963392859963392。

相关新闻

异常处理机制标准化设计:软件测试从业者的实践指南

异常处理机制标准化设计:软件测试从业者的实践指南

一、异常处理标准化的核心价值与原则 异常处理机制标准化旨在为软件系统构建统一、可预测的错误响应框架,尤其对测试从业者而言,能显著提升缺陷定位效率和系统稳定性验证能力。标准化需遵循三大原则: 分层捕获原则:明确区分接口层…

2026/7/10 23:37:12 阅读更多 →
Redis各种架构安装部署

Redis各种架构安装部署

本教程将演示在 linux 环境下安装 Redis7,给⼤家最简单,最快捷的安装⽅式,其中包括单机部署、主从部署、哨兵部署、集群部署的安装以及相应的架构介绍。 一、单机部署 1. 检查安装 gcc 环境 Redis是由C语⾔编写的,它的运⾏需要C环…

2026/7/3 17:30:25 阅读更多 →
矿山“数字皮带秤”:AI纠偏让输送损耗<0.2%

矿山“数字皮带秤”:AI纠偏让输送损耗<0.2%

皮带输送是矿山物料转运的核心环节,输送精度与皮带跑偏控制直接决定物料损耗与生产效率。传统矿山皮带秤依赖人工校准,无法实时识别皮带跑偏、物料偏载等问题,不仅计量误差大,还易因跑偏导致物料洒落、皮带磨损,输送损…

2026/7/3 17:30:26 阅读更多 →

最新新闻

AMD MI系列GPU上的AI推理:Kimi-K2-Thinking-MXFP4与其他量化模型的对比指南

AMD MI系列GPU上的AI推理:Kimi-K2-Thinking-MXFP4与其他量化模型的对比指南

AMD MI系列GPU上的AI推理:Kimi-K2-Thinking-MXFP4与其他量化模型的对比指南 【免费下载链接】Kimi-K2-Thinking-MXFP4 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Kimi-K2-Thinking-MXFP4 AMD MI系列GPU上的AI推理技术正在快速发展,其中K…

2026/7/11 17:30:39 阅读更多 →
data-to-paper的未来路线图:AI驱动科学研究的下一步发展

data-to-paper的未来路线图:AI驱动科学研究的下一步发展

data-to-paper的未来路线图:AI驱动科学研究的下一步发展 【免费下载链接】data-to-paper data-to-paper: Backward-traceable AI-driven scientific research 项目地址: https://gitcode.com/gh_mirrors/da/data-to-paper 在AI技术飞速发展的今天&#xff0c…

2026/7/11 17:26:37 阅读更多 →
3步实战指南:用Python xhs工具高效采集小红书公开数据

3步实战指南:用Python xhs工具高效采集小红书公开数据

3步实战指南:用Python xhs工具高效采集小红书公开数据 【免费下载链接】xhs 基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/ 项目地址: https://gitcode.com/gh_mirrors/xh/xhs 你是否曾为获取小红书公开数据而烦恼?无论是市…

2026/7/11 17:26:37 阅读更多 →
JAXRL实战案例:用AWAC算法解决复杂机器人控制任务

JAXRL实战案例:用AWAC算法解决复杂机器人控制任务

JAXRL实战案例:用AWAC算法解决复杂机器人控制任务 【免费下载链接】jaxrl JAX (Flax) implementation of algorithms for Deep Reinforcement Learning with continuous action spaces. 项目地址: https://gitcode.com/gh_mirrors/ja/jaxrl 🚀 快…

2026/7/11 17:26:37 阅读更多 →
☁️ 极光鸟IM|多租户 SaaS 应用解决方案,打造安全高效的企业级通讯底座

☁️ 极光鸟IM|多租户 SaaS 应用解决方案,打造安全高效的企业级通讯底座

随着 SaaS 平台快速发展,多企业、多组织、多业务场景对即时通讯能力提出了更高要求。极光鸟IM提供专业的多租户 SaaS IM 底座,帮助平台快速接入完整通讯能力,实现租户独立管理、数据隔离、安全策略配置,让企业轻松构建稳定、安全、…

2026/7/11 17:24:36 阅读更多 →
TPA3128D2音频放大器与PIC18LF25K40 MCU的高效音频系统设计

TPA3128D2音频放大器与PIC18LF25K40 MCU的高效音频系统设计

1. TPA3128D2 音频放大器核心特性解析 TPA3128D2是德州仪器(TI)推出的一款高效D类音频功率放大器芯片,专为追求高音质和低功耗的应用场景设计。这款芯片在蓝牙音箱、无线扬声器等便携式音频设备中表现出色,其核心优势在于将30W2的强劲输出与极低静态功耗…

2026/7/11 17:18:35 阅读更多 →

日新闻

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:02:12 阅读更多 →
PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

1. 项目背景与核心需求 在工业控制、安防系统和智能家居等领域,可靠的声音警报系统是不可或缺的基础组件。传统蜂鸣器存在音量不足、音质模糊等问题,而基于压电陶瓷技术的EPT-14A4005P蜂鸣器配合PIC18F45K42微控制器,能够构建一套适应性强、音…

2026/7/11 0:04:12 阅读更多 →
大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm Attention 的 CUDA Kernel 手写与验证 一、GPU 利用率 30%:分开的算子吃掉所有带宽 推理服务的 GPU 利用率监测显示一个反直觉的现象:计算核心(SM)利用率不到 30%,但…

2026/7/11 0:04:12 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/10 19:03:29 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/9 21:41:05 阅读更多 →

月新闻