算法:找到最小倍数

标签 algorithm math time complexity-theory

设某个正整数 Z 并设一个由 N 个非负整数组成的列表,标记为 z0 ... zn-1 什么算法可以找到可以用以下形式表示的 Z 的最小倍数所有 zi * ci 的总和,其中 ci 是任何非负整数常量?

该算法需要运行时间 O(Z * ( N + log(Z) ))。

我尝试使用 djikstras 算法来解决这个问题,并最终确定必须有 Z * N 边和 Z 顶点才能满足时间复杂度要求。我还发现每个 ni 最多可以有 Z 个不同的系数,因为 (min zi)/zi * Z 受 Z 约束。

也许有某种方法可以通过探索循环图设置来做到这一点?

最佳答案

您应该查找Frobenius problem (或麦乐鸡问题)。

给定两个互质整数(a,b),所有数字>= (a-1)(b-1) + 1都可以写成xa + yb 对于非负整数 x,y

使用此功能,您的搜索空间将大大减少。

关于算法:找到最小倍数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30049907/

相关文章:

c# - 寻找增强算法 : Save game state

algorithm - 对于具有 N 个成员的集合,每个子集的大小为 1 或 2 的集合分区的数量是多少?

java - 当两个 vector 的元素范围不同时,如何计算两个 vector 的余弦相似度

javascript - 试图在圆的边缘绘制坐标

Python 数学模块显示完全错误的结果?

time - 文件名中带有时间戳的 ffmpeg 输入图像列表

c++ - 递归函数的运行时间T(n)

arrays - 在矩阵中定位相邻元素的有效方法

linux - 实时系统中高效的内存调度算法

MYSQL - 如何获得时差?