【发布时间】:2018-02-05 00:00:18
【问题描述】:
问题
假设您有两个整数列表 A = [a_1, a_2, ..., a_n] 和 B = [b_1, b_2, ..., b_n]。如果B 的排列使得a_i 对于所有i 都可以被b_i 整除,我们就说A 可以被B 整除。那么问题是:是否可以重新排序(即置换)B,以便所有i 的a_i 可以被b_i 整除?
例如,如果您有
A = [6, 12, 8]
B = [3, 4, 6]
那么答案将是True,因为B 可以重新排序为B = [3, 6, 4],然后我们将得到a_1 / b_1 = 2、a_2 / b_2 = 2 和a_3 / b_3 = 2,它们都是整数,所以A 可以被B 整除。
作为一个应该输出False的例子,我们可以有:
A = [10, 12, 6, 5, 21, 25]
B = [2, 7, 5, 3, 12, 3]
这是False 的原因是我们不能对B 重新排序,因为A 中有25 和5,但B 中唯一的除数是5,所以会省略一个。
方法
显然,直接的方法是获取B 的所有排列,看看是否满足potential-divisibility,类似于:
import itertools
def is_potentially_divisible(A, B):
perms = itertools.permutations(B)
divisible = lambda ls: all( x % y == 0 for x, y in zip(A, ls))
return any(divisible(perm) for perm in perms)
问题
知道一个列表是否可以被另一个列表整除的最快方法是什么?有什么想法吗?我在想是否有一个聪明的方法可以用 primes 做到这一点,但我想不出一个解决方案。
非常感谢!
编辑:这可能与你们大多数人无关,但为了完整起见,我将解释我的动机。在群论中,有一个关于有限单群的猜想,即群的不可约特征和共轭类是否存在双射,使得每个特征度都划分相应的类大小。例如,对于 U6(4) here are what A and B would look like. 相当大的列表,请注意!
【问题讨论】:
-
有一个(现已删除)答案声称对两个列表进行排序是有效解决方案的一部分。这有什么问题吗?
-
@cᴏʟᴅsᴘᴇᴇᴅ 我不知道为什么答案被删除了。我也不知道排序在这里是否会有所帮助。
-
@McGuire:a_i 和 b_i 有多大?
-
@Blender 理想的任意大
-
是否允许在任一列表中重复?例如
B可以是[1,1,1]?
标签: python algorithm numbers primes division