【发布时间】:2019-07-01 16:53:00
【问题描述】:
给定一个数字N (where N <= 10^18) 和一个数组A(consisting of at most 20 elements)。我必须判断是否可以通过将数组的某些元素相乘来形成N。请注意,我可以多次使用任何元素。
示例:N = 8 和 A = {2, 3}。在这里,8 = 2 * 2 * 2。所以答案是YES。但是如果N = 15,那么我不能将 15 形成为一个或多个元素的乘积,使用它们任意次数。所以在这种情况下,答案是NO。
我该如何解决这个问题?
【问题讨论】:
-
首先将 N 除以 A 的每个元素。如果 A 的一个元素不能均匀地划分为 N,那么您可以丢弃该元素。考虑
N = 15和A = {2, 3}。由于 2 不均分为 15,所以可以丢弃。 -
@user3386109 如果 N = 12 且 A = {2, 6}。在这种情况下,您的方法显示错误的答案。
-
@YaseenMollik 您的评论毫无意义。所有不是
N的除数的数字都可以从A中删除而不影响答案。N = 12和A = {2,6}不是那个相对明显的点的反例。在这种情况下,不会从A中删除任何内容 -
这最好被认为是一个预处理步骤。在您执行任何其他操作之前,请将
A修剪为您可以实际使用的集合。 -
对此有一个经典的算法解决方案。您可以为数组中存在的每个元素创建队列并继续填充它们,直到找到您的元素。搜索此问题的解决方案,您的问题的方法也应相同:
Find kth multiple of given numbers. For eg, if numbers are 2,3,4,5 then find 6th number divisible by all 2,3,4,5如果您无法解决,请告诉我。