Cosmos 开源算法库 CodeChef RESQ 题解最小化矩形长宽差的因子分解策略【免费下载链接】cosmosWorlds largest Contributor driven code dataset | Used in Quark Search Engine, OpenGenus IQ, OpenGenus Visual Project项目地址: https://gitcode.com/gh_mirrors/co/cosmos导读本文围绕 Cosmos 开源算法库OpenGenus 社区贡献驱动的代码数据集中收录的 CodeChef 经典入门题RESQCupcakes / Rescue展开。题目要求用 N 个纸杯蛋糕摆成矩形使长与宽的差最小本质上是求 N 的所有因子对中最接近的一对。读完本文你将掌握该题的数学建模思路、O(√N) 的整除扫描算法并结合仓库内的 C 语言实现理解其底层推导能够轻松迁移到同类最近因子对问题。一、题目背景与完整题意本题收录于仓库 code/online_challenges/src/codechef/RESQ/README.md对应 CodeChef 上的 RESQ 问题。题目以故事化的方式给出主厨Chef正在为一场大型公司聚会准备甜点招待方坚持要求纸杯蛋糕作为甜品。派对当天蛋糕被整齐地摆成了矩形但主办方希望尽可能地接近正方形。主厨不想浪费蛋糕把它真正摆成正方形于是请你把 N 个蛋糕摆成一个矩形使得长与宽之间的差值最小。转化为算法语言即给定整数 N求整数对 (a, b)满足 a × b N且 |a − b| 最小输出该最小差值。注意几个隐含约束蛋糕是离散的个体不允许拆分因此 a、b 必须是正整数且必须是 N 的因子矩形的长与宽可以交换因此只需考虑 a ≤ b 的因子对即 a 不超过 √N当 N 本身为完全平方数时可以摆成正方形最小差值为 0。二、数学建模从矩形到最近因子对题目叙述非常生活化但去掉包装后是一个纯粹的数论 枚举问题。设矩形的长为 L、宽为 W则L × W N 目标minimize |L − W|由于 L、W 是整数它们必然是 N 的因子。若一对因子满足 L ≤ W则必有 L ≤ √N ≤ W。因此核心观察最优解一定来自某个满足d ≤ √N的因子 d 与其互补因子 N/d 组成的因子对最优答案就是所有这样的因子对中N/d − d的最小值。更精确地说答案等于N/d_max − d_max其中 d_max 是不超过 √N 的最大因子。因为函数 f(d) N/d − d 在区间 (0, √N] 上关于 d 单调递减d 越大差值越小。这个单调性的证明很简单对任意 0 d1 d2 ≤ √N有N/d1 − d1 N/d2 − d2 因为 N/d 递减而 d 递增两者之差必然递减所以无需比较所有因子对只需找到 ≤ √N 的最大因子。不过由于朴素枚举本身就是 O(√N)直接遍历所有 d 并记录最小差值同样高效且更不容易出错。三、算法设计O(√N) 整除扫描基于上面的分析算法非常直接读入测试用例数 T对每个 N初始化答案ans N − 1对应因子对 (1, N)是任意 N 都合法的保底方案从d 1循环到d ⌊√N⌋若N % d 0则 d 是 N 的因子计算diff N/d − d若diff ans更新ans diff输出ans。复杂度分析每个测试用例需要遍历 ⌊√N⌋ 个候选值时间复杂度O(√N)空间复杂度O(1)只需常数个中间变量。在 N 达到 10⁹ 量级时√N ≈ 31623单用例枚举量仅三万余次配合常规的 T ≤ 100 规模完全可以在时间限制内轻松通过。四、仓库源码逐行解析RESQ.c仓库在该题目目录下提供了 C 语言实现 code/online_challenges/src/codechef/RESQ/RESQ.c全文 27 行核心逻辑浓缩在fun函数中#include stdio.h #include math.h int fun(int area) { int p, j; int flag area - 1; // 保底答案因子对 (1, area) 的差值 for (j 1; j (int)(sqrt(area)); j) if (area % j 0) // j 是 area 的因子 { p abs(((int) area / j) - j); // 计算 |互补因子 − j| if (p flag) flag p; // 维护最小差值 } return flag; } int main() { int n, i, area, ans; scanf(%d, n); // 读入测试用例数量 for (i 0; i n; i) { scanf(%d, area); ans fun(area); printf(%d\n, ans); } }值得逐点品读的实现细节保底初值flag area − 1对应因子对 (1, N)即 1×N 的矩形差值 N−1。由于 j 从 1 开始且 1 恒为因子第一轮迭代就会算出与初值相同的 diff初值设定保证循环一定产生有效结果也天然处理了 N 为素数无其他因子的情况——此时答案就是 N−1即把所有蛋糕排成一列。循环上界(int)(sqrt(area))只需要检查不超过 √N 的因子 j其互补因子自动取area / j。这保证了每一对因子只被考察一次且area / j ≥ j因此abs虽然存在但实际差值非负。整除判定area % j 0这是整个算法的正确性根基——只有整除时 j 才是真正的因子否则跳过。由于循环覆盖了 [1, ⌊√N⌋] 的全部整数不会漏掉任何不超过 √N 的因子从而保证找到全局最优。main中的多用例循环先读 T再逐次读入 N 并打印答案与题目多组测试数据的输入格式完全吻合。从源码结构看仓库实现选择了遍历全部候选并维护最小值而非只取最大因子的写法二者在 O(√N) 的复杂度下等价前者在理解上更直观也更容易推广到变式问题。另外可以注意到fun中使用的abs严格来说应包含stdlib.h本文件仅包含stdio.h与math.h多数编译器环境下可正常编译但作为改进建议可补充stdlib.h头文件以提升可移植性。五、边界情况与正确性验证用几个典型输入手工验证算法可确认实现的正确性N因子对最小差值推理过程161×16, 2×8, 4×40完全平方数可摆成 4×4 正方形101×10, 2×53最近因子对为 2 与 571×76素数只能排成一列11×10单块蛋糕本身即为正方形241×24, 2×12, 3×8, 4×62最近因子对为 4 与 61000000000…010⁹ 31623² 附近存在完全平方因子1000²10⁶ 等实际因子对 (31250, 32000) 差 750此处仅为枚举规模示例需要注意的两类关键情况完全平方数如 16、36存在因子对 (√N, √N)答案恒为 0。循环到j √N时area % j 0成立abs(N/j − j) 0直接刷新最小值。素数除 1 和自身外无其他因子循环中始终不满足整除条件答案保持初值 N−1。这正好对应所有蛋糕摆成一长条这一最不美观但也最接近正方形之外的唯一可行矩形。六、进阶思考从 RESQ 到更多变式RESQ 虽然是一道入门题但其思想可以自然延伸到若干相关场景求最小周长的矩形由 (LW)² ≥ 4LW 4N 可知L、W 越接近周长 2(LW) 越小。因此长宽差最小与周长最小本质同解只需在求出差值后输出2 * (L W)即可。求面积给定时的近似正方形网格在图像处理、纹理平铺、布局排版等场景中给定 N 个元素摆成最接近正方形的网格是同样的数学模型可直接套用最近因子对算法。大数场景下的精度问题当 N 达到 10¹² 以上时(int)(sqrt(area))存在浮点舍入风险如浮点平方根略小于真实值导致漏检边界因子。工程化时可以改用整数二分求平方根或对(int)sqrt(N)结果做 ±1 修正这是从源码实现中可以推断并建议加固的点。七、总结与仓库导航RESQ 是一个外皮故事化、内核纯数论的典型 CodeChef 入门题只要识别出矩形长宽差最小 最近因子对这一等价关系O(√N) 的整除扫描即可在任意常规数据规模下秒过。本仓库中该题目的完整配套资料如下便于读者对照研读题目说明code/online_challenges/src/codechef/RESQ/README.mdC 语言参考实现code/online_challenges/src/codechef/RESQ/RESQ.cCodeChef 题目总览与背景code/online_challenges/src/codechef/README.md在线挑战目录总览涵盖 CodeChef、Project Euler、HackerRank、LeetCode 等平台的多种语言解法code/online_challenges/src/README.md作为 Cosmos 算法库的组成部分RESQ 的解法体现了用最朴素的整除枚举解决看似复杂的问题的竞赛哲学——先建模、再观察、最后以最简实现落地。掌握因子对扫描这一基础工具你将能轻松应对更大规模的数论与枚举类题目。【免费下载链接】cosmosWorlds largest Contributor driven code dataset | Used in Quark Search Engine, OpenGenus IQ, OpenGenus Visual Project项目地址: https://gitcode.com/gh_mirrors/co/cosmos创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Unity Shader实现Logo流光效果:从纯代码到贴图叠加全攻略 简介:面向Unity Shader入门与进阶开发者,这份示例工程演示了在Unity中实现Logo流光效果的两种典型思路:一类通过ShaderLab编写代码控制像素颜色与时间变量,另一类利用流光贴图叠加并驱动UV坐标产生滑动动画。配套资源包含可直接运… · 2026/9/23 10:06:12
EditPlus zip版完全配置指南:注册码、配置文件与右键菜单 简介:EditPlus是一款轻量而高效的专业文本编辑器,面向程序员、Web前端开发者以及经常手工编辑配置文件的运维人员。它可替代系统自带记事本,解决日常代码编写、网页调试和日志查看等需求。整个资源为一个zip压缩包,共51个文件&… · 2026/9/23 10:06:05
机器学习算法源码包解析:Python实现与经典算法避坑指南 简介:一份面向机器学习初学者与算法学习者的Python实现代码包,覆盖概率统计基础概念、Apriori、决策树、HMM维特比、朴素贝叶斯、逻辑回归以及标准线性回归、局部加权线性回归和岭回归等常用算法。压缩包共38个文件,以Python脚本、Markdown笔… · 2026/9/23 13:48:30
基于ShuffleNet的菠萝成熟度分类:轻量级CNN实战 简介:面向菠萝成熟度识别场景的轻量级卷积神经网络实战项目,基于ShuffleNet模型对没熟、半熟、成熟等8个阶段进行分类,适合希望完整掌握图像分类训练、评估与推理流程的学习者。7Z压缩包约201MB,共2000个文件,包括1992… · 2026/9/23 13:48:30
3分钟搞懂葫芦娃六娃能力 面试避坑速查手册 3分钟搞懂葫芦娃六娃能力 面试避坑速查手册 面试被问“隐形机制”原理答不上来,简历直接出局?别慌,这份《葫芦娃六娃能力速查手册》专治各种“只背八股不写代码”的尴尬。很多应届生把“隐身”当成魔法,实际上在工程落地中,这对应着状态机同步、渲染管… · 2026/9/23 13:48:30
TREX2 回路供电有什么用?新建项目调试效率提升技巧 前言
很多仪表师傅拿到 TREX2 手操器,只用来读取变送器参数、修改量程,完全忽略了 L 模块自带的回路供电功能。
在新建装置、大修项目中,DCS 系统还未上电,仪表已经全部安装就位。没有 24V 供电,普通手操器根本无法和 … · 2026/9/23 13:48:23
手写BP神经网络实战:鸢尾花与红酒数据集分类 简介:本资源是一套完整的BP神经网络实践教学包,面向人工智能初学者、本科课程设计及毕业设计学生,聚焦经典分类任务——鸢尾花与红酒数据集的建模与实现。内容涵盖可直接运行的Python源码(含iris_classify.py、wine_classify.py等… · 2026/9/23 13:48:23
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29