python - 如何按顺序生成天然产物?

标签 python math mathematical-optimization

您想获得已订购产品的列表n x m这样两个nm是自然数,1 < (n x m) < upper_limit ,说 uper_limit = 100 . n 和 m 也不能大于上限的平方根(因此 n <= 10m <= 10 )。 最直接的做法是使用列表理解生成所有产品,然后对结果进行排序。

sorted(n*m for n in range(1,10) for m in range(1,n))

但是当upper_limit变得非常大那么这不是很有效,特别是如果目标是在给定特定条件下只找到一个数字(例如找到最大产品...... ->我想按降序生成产品,测试它们并在我找到第一个符合标准的人后立即停止整个过程)。

那么,如何按顺序生成这些产品呢?

我做的第一件事是从 upper_limit 开始,一个一个地往回走,做一个双重测试: - 检查数字是否可以是 n 和 m 的乘积 - 检查标准 同样,这不是很有效...... 有解决这个问题的算法吗?

最佳答案

我找到了一个稍微更有效的解决这个问题的方法。 对于 a 和 b 是自然数:

S = a + b
D = abs(a - b)

如果S一定,D越小,a*b越大。 因此,对于每个 S(按降序排列),可以使用递增的 D 遍历所有可能的元组 (a, b)。

首先,我插入外部条件,如果乘积 ab 符合条件,那么我将遍历其他具有较小递减 S 和较小递增 D 的 (a,b) 元组,以检查我是否找到符合该条件的其他数字相同的条件,但有更大的 ab。我重复迭代,直到找到 D == 0 或 1 的数字(因为在这种情况下,不可能有 S 较小但乘积较高的元组)

关于python - 如何按顺序生成天然产物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56046873/

相关文章:

python - 如何在 python 中查找英语词典?

java - 使用 NIO 浮点缓冲区在 Java 中进行快速 4x4 矩阵乘法

math - 源自圆内的矢量圆上的交点

algorithm - 根据密度函数将平面划分为质量相等的区域

computer-science - 计算机如何乘以2个数字?

python - UUIDField 的 Django 1.10 全文搜索返回 DataError

python - 使用 pandas 链接数据转换方法的设计模式

python - scipy.stats.norm.pdf 的替代品?

math - 如何计算圆内截然相反的点?

python - Matlab 和 Python 中的 LASSO 回归结果不同