Arrays 查找可通过其他两个数与第三个数的加/减运算形成的数组元素数

Arrays 查找可通过其他两个数与第三个数的加/减运算形成的数组元素数,arrays,algorithm,math,data-structures,Arrays,Algorithm,Math,Data Structures,给定三个数字d、a、b和一个整数数组。我们可以把a或b和d加/减任意次数。我们应该找到数组中的数字计数,它可以通过将这些运算应用于d来形成 示例:如果数组是[14,15,63]和d=4,a=7和b=9 那么输出应该是2。 作为 14=4+(9-7)+(9-7)+(9-7)+(9-7)+(9-7)+(9-7) 63=4+9+9+9+9+9+7+7 但任何组合都无法获得15。因此,输出为2 请建议一个计算这个的算法。提前谢谢 只需为@user3386109的评论添加一点细节 给定三个数字d、a、b和

给定三个数字d、a、b和一个整数数组。我们可以把a或b和d加/减任意次数。我们应该找到数组中的数字计数,它可以通过将这些运算应用于d来形成

示例:如果数组是
[14,15,63]
d=4
a=7
b=9

那么输出应该是2。 作为
14=4+(9-7)+(9-7)+(9-7)+(9-7)+(9-7)+(9-7)
63=4+9+9+9+9+9+7+7
但任何组合都无法获得15。因此,输出为2


请建议一个计算这个的算法。提前谢谢

只需为@user3386109的评论添加一点细节

给定三个数字d、a、b和一个整数数组。我们可以把a或b和d加/减任意次数。我们应该找到数组中的数字计数,它可以通过将这些运算应用于d来形成

让数组中的一个元素为x

现在,假设x=d+a*i+b*j
,其中i和j是任意整数。如果这需要保持为真,那么
x-d=a*i+b*j
。 让我们看看右边这个词是怎么说的

Bézout恒等式——设a和B为具有最大公约数d的整数。然后,存在整数x和y,使得ax+by=d。更一般地说,形式为ax+by的整数正好是d的倍数


我们看到
a*i+b*j
正是
GCD(a,b)
的倍数。因此,正如@AshutoshTiwari指出的那样,x-d的差异必须可以被GCD(a,b)整除。

只是为了给@user3386109的评论增加一点细节

给定三个数字d、a、b和一个整数数组。我们可以把a或b和d加/减任意次数。我们应该找到数组中的数字计数,它可以通过将这些运算应用于d来形成

让数组中的一个元素为x

现在,假设x=d+a*i+b*j,其中i和j是任意整数。如果这需要保持为真,那么
x-d=a*i+b*j
。 让我们看看右边这个词是怎么说的

Bézout恒等式——设a和B为具有最大公约数d的整数。然后,存在整数x和y,使得ax+by=d。更一般地说,形式为ax+by的整数正好是d的倍数


我们看到
a*i+b*j
正是
GCD(a,b)
的倍数。因此,x-d的差异必须可以被GCD(a,b)整除,就像@AshutoshTiwari指出的那样。

15=4+9+9-7-7+9+9-7-7+9+9+9-9-7-7-7+7-7。事实上,你可以形成任何数字,因为7+7+7+7-9-9-9=1。一般来说,如果是1,那么你可以形成任何数字。是的,你是正确的。当GCD(a,b)不等于1时,你能提出一个解决问题的通用逻辑吗?经过分析,这里是我提出的解决方案。查找数组元素和d之间的差异。若这个差可以被GCD(a,b)整除,那个么可以在给定条件下形成数组元素。否则就不行了。感谢用户3386109的评论。15=4+9+9-7-7+9+9-7-7+9+9+9+9+9-7-7-7。事实上,你可以形成任何数字,因为7+7+7+7-9-9-9=1。一般来说,如果是1,那么你可以形成任何数字。是的,你是正确的。当GCD(a,b)不等于1时,你能提出一个解决问题的通用逻辑吗?经过分析,这里是我提出的解决方案。查找数组元素和d之间的差异。若这个差可以被GCD(a,b)整除,那个么可以在给定条件下形成数组元素。否则就不行了。感谢用户3386109的评论。