微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将一个数随机分解为三个因数

如何解决将一个数随机分解为三个因数

我已经了解了可用的问题和答案,但没有一个真正适用于我的情况,所以这里是。

我正在使用 python 并尝试将数字 1800 分解为三个随机因子。我并不真正关心输出的格式。我可以使用元组、列表,甚至三个单独的变量数。我也不担心让所有因素都受到同样的重视。我的输出可能是 2,2,450 或 12,15,10 或其他任何东西。

我最好的想法是使用质因数分解 (2,3,5,5),创建三个随机子集,并将每个子集中的项目相乘。我研究了多种方法,它们似乎都有一些问题。

来自 scikitlearn 的

ShuffleSplit 只会给我值的索引。所以我必须拆分,将值放入两个列表中,然后再次拆分并将值放入两个新列表中。这变成了很多行代码

使用 randint 将允许我找到质因数的子列表,将它放在一边,找到剩余质因数的另一个子列表,然后将每个列表相乘。这只是部分随机,因为我必须确定每个列表中要包含多少个因素。

我可以使用 itertools.permutations(或其他一些置换函数生成一个随机排序的因子列表,然后手动将该列表分成三个列表。这与 randint 方法具有相同的问题,因为我必须指定在我的三个输出因子中的每一个中包含多少个小质因子。

列出所有可能的因素组合并随机选择一个在时间上并不可行。

使用 Python 执行此操作的好方法是什么(快速、简单且具有潜在的可扩展性)?

解决方法

我假设您已经编写了用于生成素数和因式分解的代码。如果不是,则网络上的代码不到 200 行。

所以你有一个素数列表,例如,[2,2,3,5,5]

与其沿着您建议的路径走,我认为您最好使用随机样本,因为它不会替换所使用的数字。您知道第一个数字可以与质因数的数量减二一样大(因为您必须再有两个数字)。第二个数字将来自随机样本集,该集合要么是 1(如果只有两个剩余数字或一个介于 1 和剩余数字数量之间的随机数,减去 1(因为,同样,您必须至少有再加一个数字来组成三个)

这将为您提供第一组数字。我想你可以看到从那里去哪里。

import random

prime_factors = [2,5]

def rand_factors(lst):
    elem_for_first_factor = random.randint(1,len(prime_factors)-2)
    return [k for k in random.sample(prime_factors,elem_for_first_factor)]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。