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

时间:2019-01-27 04:52:06

标签: arrays algorithm math data-structures

给出三个数字d,a,b和一个整数数组。我们可以将a或b加或减到d任意次。我们应该在数组中找到可以通过对d进行这些运算而形成的数字计数。

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

则输出应为2。 如 14 = 4 + (9 - 7) + (9 - 7) + (9 - 7) + (9 - 7) + (9 - 7) 63 = 4 + 9 + 9 + 9 + 9 + 9 + 7 + 7 但是不能以任何组合获得15。因此输出为2。

请提出一种计算算法。提前致谢。

1 个答案:

答案 0 :(得分: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's identity

  

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)整除。